Запуск скрипта, в котором вы добавляете ошибки в файл и используете nohup

Запуск скрипта, в котором вы добавляете ошибки в файл и используете nohup

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

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

Связанный контент