1

Скрипт работает!

Сначала я набираю это в своем 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$

3 ответа3

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.

1

Я предполагаю, что ваша программа открывает 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 &
0

Я нашел решение.

php script.php [args] </dev/null >>/path/to/log 2>&1 &

PHP ждал ввода ... Я понятия не имею, могу ли я это исправить в файле php.ini, но пока это работает ...

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .