Executando um script onde você anexa os erros ao arquivo e usa nohup

Executando um script onde você anexa os erros ao arquivo e usa nohup

O roteiro funciona!

Primeiro eu digito isso na minha CLI: php worker.php >>/home/xxx/log 2>&1 Depois, quero que ele seja executado como seu próprio processo ou algo assim, então adiciono um &no final, assim:php worker.php >>/home/xxx/log 2>&1 &

Mas agora o script nunca é executado, porque nada é anexado /home/xxx/loge quando verifico ps -fuxo script ainda está lá.

Uma coisa que não entendo é que quando executo o último comando recebo isto:

xxx@xxx:/path$ php worker.php >>/home/xxx/log 2>&1 &
[1] 10659

Mais tarde, quando tento sair do shell, ele me diz o seguinte:

xxx@xxx:/path$ logout
There are stopped jobs.

[1]+  Stopped                 php worker.php >> /home/xxx/log 2>&1

O que está acontecendo aqui? Tudo o que quero é executar um script em segundo plano e anexar toda a saída a um arquivo.

Obrigado!

EDITAR:

Aqui está um exemplo.

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$

Responder1

Acho que deve haver um erro de digitação ou algo assim em algum lugar. O que você está descrevendo deve funcionar perfeitamente:

$ 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

Você poderia tentar com este exemplo e nos informar se funciona?


O [1] 16353está apenas bashdizendo que lançou o trabalho em segundo plano com umID do processode 16353.

Responder2

Meu palpite é que seu programa abre o tty. Pode não ser você quem faz isso, mas o próprio PHP.

Tentar:

php worker.php </dev/null >>/home/xxx/log 2>&1 &

Se isso não funcionar, você pode executá-lo em tmux/screen:

tmux [enter]
php worker.php </dev/null >>/home/xxx/log 2>&1
[CTRL-b][d]

Você provavelmente também pode executá-lo usando o script:

echo "php worker.php >>/home/xxx/log 2>&1" | script &

Responder3

Eu encontrei a solução.

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

O PHP estava esperando por uma entrada... Não tenho ideia se posso consertar isso no arquivo php.ini, mas por enquanto funciona...

informação relacionada