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