
Скрипт работает!
Сначала я набираю это в своем CLI: php worker.php >>/home/xxx/log 2>&1
Затем я хочу, чтобы это запускалось как отдельный процесс или как-то еще, поэтому я добавляю &
в конце, вот так:php worker.php >>/home/xxx/log 2>&1 &
Но теперь скрипт никогда не выполняется, потому что к нему ничего не добавляется, /home/xxx/log
а когда я проверяю, ps -fux
скрипт все еще там.
Единственное, чего я не понимаю, так это то, что когда я запускаю последнюю команду, я получаю следующее:
xxx@xxx:/path$ php worker.php >>/home/xxx/log 2>&1 &
[1] 10659
Позже, когда я пытаюсь выйти из оболочки, он мне сообщает следующее:
xxx@xxx:/path$ logout
There are stopped jobs.
[1]+ Stopped php worker.php >> /home/xxx/log 2>&1
Что здесь происходит? Все, что мне нужно, это запустить скрипт в фоновом режиме и добавить все выходные данные в файл.
Спасибо!
РЕДАКТИРОВАТЬ:
Вот пример.
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$
решение1
Я думаю, что где-то опечатка или что-то в этом роде. То, что вы описываете, должно работать идеально:
$ 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
Не могли бы вы попробовать этот пример и сообщить нам, сработает ли он?
Он [1] 16353
просто bash
сообщает вам, что запустил задание в фоновом режиме с помощьюидентификатор процессаиз 16353.
решение2
Я предполагаю, что ваша программа открывает tty. Возможно, это делаете не вы, а сам PHP.
Пытаться:
php worker.php </dev/null >>/home/xxx/log 2>&1 &
Если это не сработает, вы всегда можете запустить его в tmux/screen:
tmux [enter]
php worker.php </dev/null >>/home/xxx/log 2>&1
[CTRL-b][d]
Вероятно, вы также можете запустить его с помощью скрипта:
echo "php worker.php >>/home/xxx/log 2>&1" | script &
решение3
Я нашел решение.
php script.php [args] </dev/null >>/path/to/log 2>&1 &
PHP ожидал ввода... Понятия не имею, можно ли исправить это в файле php.ini, но пока это работает...