GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Ausführen des PHP-Skripts von der Befehlszeile als Hintergrundprozess

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

Die Größer-als-Zeichen (> ) in Befehlen wie diesen leiten die Ausgabe des Programms irgendwohin um. In diesem Fall wird etwas zu /dev/null umgeleitet , und etwas wird zu &1 umgeleitet

Standardeingang, -ausgang und -fehler

Es gibt drei Standard-Eingabe- und Ausgabequellen für ein Programm. Die Standardeingabe kommt normalerweise von der Tastatur, wenn es sich um ein interaktives Programm handelt, oder von einem anderen Programm, wenn es die Ausgabe des anderen Programms verarbeitet. Das Programm druckt normalerweise auf die Standardausgabe und manchmal auf die Standardfehlerausgabe. Diese drei Dateideskriptoren (man kann sie sich als „Datenleitungen“ vorstellen) werden oft als STDIN, STDOUT, and STDERR bezeichnet .

Manchmal sind sie nicht benannt, sie sind nummeriert! Die eingebauten Nummerierungen dafür sind 0, 1, and 2 , in dieser Reihenfolge. Wenn Sie Eins nicht explizit nennen oder nummerieren, sprechen Sie standardmäßig von STDOUT .

Der obige Befehl leitet die Standardausgabe auf /dev/null um , das ist ein Ort, an dem Sie alles ausgeben können, was Sie nicht wollen, und dann den Standardfehler in die Standardausgabe umleiten (Sie müssen eine & vor dem Ziel, wenn Sie dies tun).

Die kurze Erklärung lautet daher:„Alle Ausgaben dieses Befehls sollten in ein schwarzes Loch geschoben werden.“ Das ist eine gute Möglichkeit, ein Programm wirklich leise zu machen!

& am Ende setzt den Befehl in den Hintergrund.

Siehe:https://www.xaprb.com/blog/2006/06/06/what-does-devnull-21-mean/


Sind Sie sicher, dass das Skript keine Fehler enthält? Dies führt normalerweise dazu, dass "die Ausführung sehr schnell beendet wird ".
Fügen Sie zunächst Folgendes hinzu:

error_reporting(E_ALL); ini_set('display_errors', 1);

oben in Ihrem Skript, um eventuelle Fehler anzuzeigen, dann können Sie :

verwenden

nohup php filename.php &

nohup führt einen Befehl auch dann aus, wenn die Sitzung getrennt wird oder sich der Benutzer abmeldet.

ODER

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

Wie oben, aber nohup.out wird nicht erstellt Datei.

Sie können auch verwenden:
ignore_user_abort(1);

Legen Sie fest, ob eine Client-Trennung die Skriptausführung abbrechen soll


`set_time_limit(0);`

Begrenzt die maximale Ausführungszeit des Skripts, in diesem Fall wird es ausgeführt, bis der Prozess beendet ist oder der Apache-Prozess neu gestartet wird.

#AnmerkungenDie php und die filename.php Pfade können als vollständiger Pfad angegeben werden , statt php und filename.php , können Sie /usr/bin/php verwenden und /full/path/to/filename.php .
Der vollständige Pfad wird empfohlen um Datei nicht gefunden zu vermeiden Fehler.


Der Prozess kann geschlossen werden, wenn Ihre Sitzung geschlossen wird.

versuchen Sie es mit nohup php filename.php


Linux
  1. So listen Sie in PHP geladene oder aktivierte Module über die Befehlszeile auf

  2. Ausführen von Software-Center von der Befehlszeile als Root?

  3. 6 Beispiele für Script-Befehlszeilenargumente

  4. Wie installiere ich ein Skript, das überall von der Befehlszeile aus ausgeführt werden kann?

  5. Ausführen eines Python-Skripts von PHP

Programmieren Sie Hardware über die Linux-Befehlszeile

So führen Sie einen Linux-Shell-Befehl / ein Skript im Hintergrund aus

Wie kann ich PHP-Code von der Kommandozeile aus ausführen?

Wie erhalte ich die übergeordnete PID eines bestimmten Prozesses in GNU/Linux von der Befehlszeile aus?

Der im Hintergrund laufende Prozess wurde unter Linux beendet

Clonezilla von der Befehlszeile