shell_exec o.a.: Prozess im Hintergrund/raus starten

mr b

Mitglied
heyho,
ich hab ein PHP Script geschrieben, was alle 3 Stunden bestimmte Dateien via FTP backupen soll.
Das leuft auch soweit ganz gut. Jedoch möchte ich selbiges Script alle 24 Stunden neustarten. Und hier kommt es zum Problem. Ersteinmal mein Code:

PHP:
<?

$starttime = time();

echo date("H:i:s - d.m.Y")."\n";

while( ($starttime + 86400) > time() ) {
	echo "Backup at ".date("H:i:s - d.m.Y")."...\n";

	$output = shell_exec("ftp -user:backup -password:back-up39 -s:command.txt 192.168.1.94 21");
	
	unset($output);

	echo "Done at ".date("H:i:s - d.m.Y").".\n";
	sleep(10800);
}

unset($starttime);

shell_exec("start php -f backup.php");

echo date("H:i:s - d.m.Y")."\n";

?>

Man kann das sicherlich auch anders loesen. Aber mich stoert in 1. Linie, dass ich das Problem nicht verstehe.
Das ganze leuft unter Windows 2003 Server. PHP leuft auf der Commandzeile als CLI-Version. Die While-Schleife leuft bis das Script 24 Stunden gelaufen ist. Dann loesche ich die Variable mit der Start-Zeit. Als naechstes Rufe ich via shell_exec das Script selber auf (Neustart), gebe die Endzeit des Scripts aus und lasse es zu Ende laufen. Das Script sollte sich beenden. Es bleibt jedoch bei dem shell_exec stehen.
Zur Erklaerung des Befehls "start php -f backup.php".
start ist ein batch-Befehl und startet das darauffolgende Programm als eigenen/neuen Prozess. Hier wird der PHP-Interpretor mit der laufenden php-datei als parameter gestartet. Dadurch fuert der PHP-Interpretor backup.php aus. Der oben gezeigte Code ist von backup.php.
Wenn man in der Cmd/Commando-Zeile via start ein Programm, egal welcher Art, startet, wird dieses im Hintergrund ausgefuehrt. Die Cmd ist sofort wieder verfuegbar. Deshalb muesste eigentl. auch shell_exec sofort wieder ins PHP Script zurueckkehren. Tut es jedoch leider nicht. Es wartet darauf, dass der gestartete Prozess sich beendet bzw. beendet wird.
Eigentlich soll nach dem erneuten starten des Scriptes via shell_exec, der alte Ablauf zum Ende finden. Er bleibt jedoch an besagter Stelle stehen und so auch alle darauf folgenden Prozesse.

Meine Frage wäre jetzt: Wieso funktioniert start nicht und wie kann man sonst shell_exec dazu bringen, direkt nach ausfuehren des Programms wieder ins PHP-Script zurueck zukehren? Es muss auch nicht unbedingt shell_exec sein. Ich moechte nur nicht die w32api's verwenden um den Prozess im Hintergrund laufen zu lassen.
Auf php.net steht, man solle darauf achten das die Ausgabe des Prozesses umgelenkt wird (in eine Datei oder aehnliches), damit das PHP-Script nicht blockiert wird und die exec-Funktion sofort wieder ins PHP-Script zurueckkehrt. Aber auch das habe ich nicht mit Erfolg (das shell_exec ins PHP-Script zurueckkehrt) hinbekommen.
Ich bitte um Eure Hilfe. Vielleicht weiss jmd. Rat oder kann das Script einmal bei sich ausprobieren. Liegt es etwa an meinem System?

Freue mich ueber jede hilfreiche Antwort.

Gruesse

b
 

Neue Beiträge

Zurück