0 && $connection_id !== $connection_filter) continue; $matched++; $config = isset($connection['config']) && is_array($connection['config']) ? $connection['config'] : array(); $state_dir = rtrim((string)($config['state_dir'] ?? ''), '/'); if ($state_dir === '') { fwrite(STDERR, "Worker für Verbindung #{$connection_id} übersprungen: Connector-State-Verzeichnis fehlt.\n"); $result = 1; continue; } if ($mode === 'sync') { if (!is_dir($state_dir) && !@mkdir($state_dir, 0750, true) && !is_dir($state_dir)) { fwrite(STDERR, "Worker-Priorität für Verbindung #{$connection_id} konnte nicht signalisiert werden: State-Verzeichnis fehlt.\n"); $result = 1; continue; } $priority_file = $state_dir.'/webdav-cache-warmup-priority-sync'; $priority_payload = json_encode(array( 'connection_id'=>$connection_id, 'requested_at'=>time(), 'reason'=>'connector-sync-complete', ), JSON_UNESCAPED_SLASHES); if (!is_string($priority_payload) || @file_put_contents($priority_file, $priority_payload."\n", LOCK_EX) === false) { fwrite(STDERR, "Worker-Priorität für Verbindung #{$connection_id} konnte nicht geschrieben werden.\n"); $result = 1; continue; } @chmod($priority_file, 0664); } $worker_command = escapeshellarg(PHP_BINARY).' '.escapeshellarg($worker) .' --connection-id='.$connection_id .' --mode='.escapeshellarg($mode); $base = $mode === 'sync' ? escapeshellarg('/bin/bash').' '.escapeshellarg($priority_waiter).' '.escapeshellarg($state_dir).' '.$worker_command : $worker_command; if ($wait) { $output = array(); $exit = 1; @exec($base.' 2>&1', $output, $exit); foreach ($output as $line) fwrite(STDOUT, $line."\n"); if ($exit !== 0) $result = $exit; } else { $command = 'nohup '.$base.' >> '.escapeshellarg($log).' 2>&1 < /dev/null & echo $!'; $output = array(); $exit = 1; @exec($command, $output, $exit); $pid = isset($output[0]) ? (int)$output[0] : 0; if ($exit !== 0 || $pid <= 0) { fwrite(STDERR, "Worker für Verbindung #{$connection_id} konnte nicht gestartet werden.\n"); $result = 1; continue; } $started++; fwrite(STDOUT, "WebDAV-Worker {$mode} für Verbindung #{$connection_id} gestartet (PID {$pid}).\n"); } } if ($connection_filter > 0 && $matched === 0) { fwrite(STDERR, "WebDAV-Verbindung #{$connection_filter} wurde nicht als aktive Connector-Verbindung gefunden.\n"); exit(1); } if (!$wait) fwrite(STDOUT, "Gestartete WebDAV-Worker: {$started}.\n"); exit($result);