PHP wird beim Reload des Webserver neu gestartet
steffi
- webserver
0 fastix®0 Alexander Brock0 dedlfix
hi.
bisher kam ich bestens mit meinem webserver zurecht. doch nun benötigt ein script, welches wirklich viel zu tun hat und lange braucht, eine uneingeschränkte execution time. kein problem, dachte ich und änderte die max execution time auf 0. gut. nun geht es stundenlang gut. doch irgendwann scheint immer eder webserver reloaded zu werden, wie es confixx nennt... kann ich irgendwie für den user einrichten, dass dessen scripte nicht über den apache mit php sondern irgendwie anders (mod_php o.ä.?) ausgeführt werden und niemals unterbrochen werden außer der server kackt ab....
danke für tipps
Moin!
hi.
bisher kam ich bestens mit meinem webserver zurecht. doch nun benötigt ein script, welches wirklich viel zu tun hat und lange braucht, eine uneingeschränkte execution time. kein problem, dachte ich und änderte die max execution time auf 0. gut. nun geht es stundenlang gut. doch irgendwann scheint immer eder webserver reloaded zu werden, wie es confixx nennt... kann ich irgendwie für den user einrichten, dass dessen scripte nicht über den apache mit php sondern irgendwie anders (mod_php o.ä.?) ausgeführt werden und niemals unterbrochen werden außer der server kackt ab....
danke für tipps
Ich gehe mal von Linu oder Unix aus.
Ganz einfach. Du musst das Skript so starten, dass es nicht als Kindprozess des Webservers gestartet wird. Das Beenden des Elternprozesses beendet normalerweise auch die "Kinder" dieses Prozesses. Also, das ist so ähnlich, wie wenn Du an der Eingabeaufforderung den DOS-Editor startest und dann die Eingabeauffordeung schließt. Dann wird auch der Editor beendet.
Sollte auf dem Server der atd laufen kannst Du ein Skript etwa so starten:
<?php
$intMinute=date('i')+1;
$intStunde=date('i');
if ($intMinute==60) {$intMinute=0;$intStunde++;}
if ($intStunde==24) {$intStunde=0;}
$dummy = echo "/pfad/zum/skript.php" at $intMinute:$intStunde
;
echo "<pre>$dummy</pre>";
?>
Das Skript muss in dem Fall ausführbar sein und sollte eine shebang(*) enthalten. Nein, es muss kein PHP-Skript sein, kann aber.
Das Skript kann dann wieder mit atq gelistet und atrm gelöscht werden. Alle Ausgaben bekommt der Benutzer, der es startet, per Mail- es sei denn, Du lenkst Diese in ein Logfile um. Vergiss dann auch nicht die Fehlermeldungen in eine Datei umzuleiten.
* shebang: Erste(!) Zeile:
#! /usr/bin/php -q
Die shebang weisst dem system den Weg zum Skriptinterpreter (und dessen Optionen, hier Unterdrückung des HTTP-Header "Content-type=...").
Es gibt sicher noch mehr Möglichkeiten.
MFFG (Mit freundlich- friedfertigem Grinsen)
fastix®
Hallo Freunde des gehobenen Forumsgenusses,
kann ich irgendwie für den user einrichten, dass dessen scripte nicht über den apache mit php sondern irgendwie anders (mod_php o.ä.?) ausgeführt werden und niemals unterbrochen werden außer der server kackt ab....
Wenn du SSH-Zugriff auf deinen Server hast kannst du mit
nohup php /pfad/zum/script.php &
ein Script ausführen. Du kannst dann auch mittels pstree oder top sehen,
ob das Script noch läuft (und was sonst noch alles läuft).
Gruß
Alexander Brock
echo $begrüßung;
Wenn du SSH-Zugriff auf deinen Server hast kannst du mit
nohup php /pfad/zum/script.php &
ein Script ausführen. Du kannst dann auch mittels pstree oder top sehen,
ob das Script noch läuft (und was sonst noch alles läuft).
Eleganter geht es, wenn man screen nutzt (so vorhanden). Damit kann man sowohl mehrere Shells über eine Verbindung öffnen und auch zwischen ihnen umschalten. Die Ausgabe wird dabei gepuffert, so dass man auch zurückblättern kann. Außerdem läuft es von selbst weiter, wenn die Verbindung unterbrochen wurde und man kann sich nach wieder hiergestellter Verbindung wieder in das laufende screen einklinken.
echo "$verabschiedung $name";