Ejecutar un script donde agrega los errores al archivo y usa nohup

Ejecutar un script donde agrega los errores al archivo y usa nohup

¡El guión funciona!

Primero escribo esto en mi CLI: php worker.php >>/home/xxx/log 2>&1 luego quiero que se ejecute como su propio proceso o lo que sea, así que agrego un &al final, como este:php worker.php >>/home/xxx/log 2>&1 &

Pero ahora el script nunca se ejecuta porque no se agrega nada /home/xxx/logy cuando reviso ps -fuxel script todavía está allí.

Una cosa que no entiendo es que cuando ejecuto el último comando me sale esto:

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

Más tarde, cuando intento cerrar sesión en el shell, me dice esto:

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

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

¿Que esta pasando aqui? Todo lo que quiero es ejecutar un script en segundo plano y agregar todos los resultados a un archivo.

¡Gracias!

EDITAR:

He aquí un ejemplo.

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$

Respuesta1

Creo que debe haber un error tipográfico o algo así en alguna parte. Lo que estás describiendo debería funcionar perfectamente:

$ 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

¿Podrías probar con este ejemplo y contarnos si funciona?


Solo le [1] 16353dice bashque ha iniciado el trabajo en segundo plano con unidentificacion de procesode 16353.

Respuesta2

Supongo que tu programa abre el tty. Puede que no seas tú quien haga eso, sino el propio PHP.

Intentar:

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

Si eso no funciona, siempre puedes ejecutarlo en tmux/screen:

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

Probablemente también puedas ejecutarlo usando el script:

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

Respuesta3

Encontré la solución.

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

PHP estaba esperando una entrada... No tengo idea si puedo arreglar esto en el archivo php.ini, pero por ahora eso funciona...

información relacionada