Verwenden von nohup, um ein Skript unbegrenzt laufen zu lassen


7

Ich bin sehr neu in Linuxund ich habe es nur SSHauf meinem Webserver verwendet Putty. Das Problem, das ich habe, ist folgendes:

Grundsätzlich habe ich 2 phpSkripte. Einer get_tweets.phphört ständig auf Tweets auf Twitter, Streaming APIwährend der andere parse_tweets.phpdiese in a anmeldet db. Damit diese funktionieren, müssen sie kontinuierlich laufen.

Ich habe die folgenden Befehle verwendet, um sie im Hintergrund auszuführen, und nach dem, was ich gesehen habe, werden sie den größten Teil des Tages ausgeführt. Wenn ich mich jedoch morgens an meinem Computer anmelde, scriptswerden sie angehalten und ich muss Befehle ausführen nochmal.

nohup php my_script.php > /dev/null &

Ich frage mich nur, ob das aufgrund der von mir verwendeten Befehle normal ist. Sollten sie bei der Verwendung unbegrenzt ausgeführt werden nohupund wenn nicht, welche Alternative? Ein CRONJob?

Danke für die Hilfe

Antworten:


9

Mit nohupmüssen Sie auch Fehler umleiten. Der nächste Befehl führt ein Skript mit Ausgabe und Fehlern aus, die nach / dev / null umleiten:

nohup php my_script.php >/dev/null 2>&1 &

Ihr Skript kann jedoch aus anderen Gründen beendet werden (Fehler im Skript, Oom-Killer usw.). Sie sollten es also mit dem Init des Systems dämonisieren (wenn es den automatischen Neustart unterstützt - Upstart, Systemd und einige andere können dies tun). Oder Sie sollten eine Cron-Aufgabe zur Überprüfung schreiben und Ihr Skript neu starten, wenn es nicht ausgeführt wird.


4

Vielleicht möchten Sie sehen, was los ist, und die Ausgabe nicht umleiten /dev/null.

Ich schlage vor, Sie eröffnen eine screenoder tmuxSitzung. Beide sind Terminal-Multiplexer , die auch dann am Leben bleiben, wenn Sie sich abmelden.

ZB (..)für Infos

$ screen
$(inside screen-t1): ./get_tweets.php
.... running first

Drücken Sie nun Ctrl-a c, um ein neues Terminal zu öffnen.

 $(inside screen-t2): ./parse_tweets.php
 ... running second

Ctrl-a dMit dieser Option können Sie die Sitzung trennen. Wenn Sie sich wieder anmelden, verwenden Siescreen -r

Hinweis: Sie können eine Statusleiste auf dem Bildschirm anzeigen, um die verschiedenen Fenster anzuzeigen.


0

Wenn Sie nur sicherstellen möchten, dass Ihr Skript nach dem Tod neu gestartet wird, können Sie Folgendes tun while true ; do php my_script.php ; done > /dev/null

Dadurch wird gewartet, bis my_script.php ausgeführt wird, und dann erneut ausgeführt. Alle Ausgaben werden an / dev / null gesendet

Wenn Sie nohup verwenden möchten, sollten Sie Folgendes tun

$ echo 'while true ; do php my_script.php ; done > /dev/null' > ~/php_run_loop.sh
$ chmod a+x ~/php_run_loop.sh
$ nohup ~/php_run_loop.sh

HINWEIS: Wenn Sie einen Fehler oder ein anderes Problem in Ihrem PHP-Skript haben, führt dies dazu, dass es immer wieder unbegrenzt ausgeführt wird. Dies ist keine anmutige Lösung, aber es ist eine Lösung.

Übrigens ist cron gut geeignet, um einen kurzlebigen Prozess nach einem Zeitplan auszuführen (alle 5 Minuten oder jede Woche usw.). Es weiß nicht, wie ein vorhandener Prozess ausgeführt werden soll.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.