2010-12-20 6 views
0

Ich habe ein Web-Skript, das eine sehr lange Zeit braucht, um ausgeführt zu werden (und es sollte lange dauern). Mit "Web-Skript" meine ich ein Skript, das ausgeführt wird, indem eine Seite in einem Browser aufgerufen wird und der Ausführung in der Befehlszeile entgegensteht. Das Skript ist in PHP und ich bin auf einem LAMP-Stack.Wie man einen Web-Prozess killt

Wie kann ich diesen Prozess finden und beenden, wenn ich möchte?

"Kill" könnte das falsche Wort sein. Ich möchte nur, dass das Skript aufhört. Ich könnte dieses Skript möglicherweise "beobachten" lassen, dass sich ein Zustand meines Systems ändert, und dann anhalten, wenn es diese Änderung bemerkt. Wenn ich das tue, bin ich nicht sicher, was der beste Weg wäre, das zu tun. Auf jeden Fall bin ich offen für irgendwelche Vorschläge.

+1

Eine Sache zu beachten ist, dass Sie PHP [max_execution_time] (http://www.php.net/manual/en/info.configuration.php#ini.max-execution-time) einstellen können: Das heißt, Sie können angeben, wie viel Zeit ein PHP-Skript haben darf, bevor es getötet wird. Das könnte nützlicher sein, als es manuell zu stoppen oder zu versuchen, Logik zu entwickeln, um es zu töten. –

+0

@Mark, Sehr guter Punkt. –

+0

Das ist wahr. In dieser speziellen Situation ist es wichtig, dass ich das Skript jederzeit beenden kann. –

Antwort

3

Wenn das Skript startet, schreiben seine pid in eine Datei, so etwas wie

file_put_contents(getmypid().".pid","Running"); 

Und wenn das Skript fertig ist, löscht er die Datei.

Sie erstellen dann ein anderes Skript, das Form Cron ausführen wird. Es sucht nach PID-Dateien über ein bestimmtes Alter und macht eine kill $pid auf sie

Einfach.

+0

Ich endete damit, außer ohne Cron. –

0

Gehen Sie einfach auf die Webseite des Skripts dh .. www.mysite.com/mywebscript.php oder führen Sie das Skript von einer anderen Seite aus? Ich würde vorschlagen, system() oder etwas zu verwenden, auf diese Weise können Sie tatsächlich die Prozess-ID auf Ihrer Linux-Plattform nachschlagen. Obwohl jemand wahrscheinlich mein erwähntes System abstimmen wird()

Sie könnten auch einen Thread in Ihrem Skript verwenden. Sie können alles ausführen lassen und gleichzeitig Eingaben machen und einfach einen Befehl senden, um es jederzeit zu beenden.