
Das Skript funktioniert!
Zuerst gebe ich dies in meine CLI ein: php worker.php >>/home/xxx/log 2>&1
Dann möchte ich, dass es als eigener Prozess oder was auch immer ausgeführt wird, also füge ich &
am Ende ein hinzu, so:php worker.php >>/home/xxx/log 2>&1 &
Aber jetzt wird das Skript nie ausgeführt, weil nichts angehängt wird /home/xxx/log
und wenn ich nachschaue, ps -fux
ist das Skript immer noch da.
Was ich nicht verstehe, ist, dass ich Folgendes erhalte, wenn ich den letzten Befehl ausführe:
xxx@xxx:/path$ php worker.php >>/home/xxx/log 2>&1 &
[1] 10659
Wenn ich später versuche, mich aus der Shell abzumelden, wird mir Folgendes angezeigt:
xxx@xxx:/path$ logout
There are stopped jobs.
[1]+ Stopped php worker.php >> /home/xxx/log 2>&1
Was ist hier los? Ich möchte lediglich ein Skript im Hintergrund ausführen und die gesamte Ausgabe an eine Datei anhängen.
Danke!
BEARBEITEN:
Hier ist ein Beispiel.
user@box:~/nohuptest$ vim worker.php
user@box:~/nohuptest$ touch log
user@box:~/nohuptest$ php worker.php >> log 2>&1 &
[1] 31523
user@box:~/nohuptest$ cat log
[1]+ Stopped php worker.php >> log 2>&1
user@box:~/nohuptest$ php worker.php >> log 2>&1 &
[2] 31626
user@box:~/nohuptest$ cat log
[2]+ Stopped php worker.php >> log 2>&1
user@box:~/nohuptest$
user@box:~/nohuptest$ cat worker.php
<?php
echo "hello world\n";
?>
user@box:~/nohuptest$
Antwort1
Ich denke, da muss irgendwo ein Tippfehler oder so etwas sein. Was Sie beschreiben, sollte perfekt funktionieren:
$ cat worker.php
<?
echo "hello world\n"
?>
$ php worker.php >> log 2>&1 &
[1] 16353
$ cat log
hello world
$ php worker.php >> log 2>&1 &
$ cat log
hello world
hello world
Könnten Sie es mit diesem Beispiel versuchen und uns mitteilen, ob es funktioniert?
Das sagt Ihnen [1] 16353
nur bash
, dass es den Job im Hintergrund mit einem gestartet hatProzess IDvon 16353.
Antwort2
Ich vermute, dass Ihr Programm das TTY öffnet. Möglicherweise sind es nicht Sie, der das tut, sondern PHP selbst.
Versuchen:
php worker.php </dev/null >>/home/xxx/log 2>&1 &
Wenn das nicht funktioniert, können Sie es immer in tmux/screen ausführen:
tmux [enter]
php worker.php </dev/null >>/home/xxx/log 2>&1
[CTRL-b][d]
Sie können es wahrscheinlich auch mit einem Skript ausführen:
echo "php worker.php >>/home/xxx/log 2>&1" | script &
Antwort3
Ich habe die Lösung gefunden.
php script.php [args] </dev/null >>/path/to/log 2>&1 &
PHP hat auf eine Eingabe gewartet ... Ich habe keine Ahnung, ob ich das in der Datei php.ini beheben kann, aber im Moment funktioniert das ...