
¡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/log
y cuando reviso ps -fux
el 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] 16353
dice bash
que 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...