Linux Processo PHP de Background

1

Ok, isso parece muito estranho. Quando eu estou executando um script php a partir da linha de comando com & no final para executá-lo em segundo plano, ele é imediatamente interrompido. Eu tentei em outro servidor e funcionou como esperado; o trabalho está sendo executado em segundo plano.

O PHP

#!/usr/bin/php
<?php
sleep (5);

Saída no servidor 1

[mk@li89-44 html]# ./test.php &
[1] 4938
[mk@li89-44 html]# jobs
[1]+  Running        ./test.php &

Saída no servidor 2

[mk@dev html]# ./test.php &
[1] 4938
[mk@dev html]# jobs
[1]+  Stopped        ./test.php &

No Servidor 2, posso obtê-lo no plano de fundo da seguinte forma:

[mk@dev html]$ ./test.php
ctrl + z
[1]+  Stopped                 ./test.php
[mk@dev html]$ bg
[1]+ ./test.php &
[mk@dev html]$ jobs
[1]+  Running                 ./test.php

Também no Servidor 2, se eu fizer algo como wget "http://fileserver.com/largefile.gz" & , ele vai para o bg executando como esperado. A execução de nohup ./test.php & no servidor 2 também funciona conforme o esperado.

Ambos os servidores estão rodando centos, versões diferentes e versões diferentes do php também. Eu não sei se isso é relevante, ou se isso pode ser explicado apenas pela forma como jobs , fg , bg funciona no linux.

    
por profitphp 24.10.2011 / 23:13

2 respostas

1

Se você olhar para um strace do processo, você pode ver que o PHP sempre inicializa o terminal, o que requer que o PHP controle o terminal:

ioctl(0, TCSETSW, {B38400 opost isig icanon echo ...}) = ? ERESTARTSYS
--- {si_signo=SIGTTOU, si_code=SI_KERNEL} (Stopped (tty output)) ---
--- Stopped (tty output) by SIGTTOU ---

Uma solução simples:

./test.php > /dev/null &

    
por 25.10.2011 / 06:41
0

tem certeza de que instalou o pacote php-cli?

verifique se /usr/bin/php é um caminho do binário, diferentes distribuições usam caminhos diferentes.

    
por 24.10.2011 / 23:25

Tags