nohup: avvia il process PHP in background

cerco di eseguire i processi php in background e avviare questo da un file php.

Alcune informazioni: PHP versione 5.2.17, php safe_mode è spento, sistema linux. Avvio il process con exec, provato già shell_exec. Ho impostato tutti i file su 0755, 0777.

$pid = exec("nohup $cmd > /dev/null 2> /dev/null & echo $!"); 

Se stampo questa affermazione, ottengo questo e il pid va bene:

 nohup /usr/local/bin/php5 /.../../file.php > /dev/null 2> /dev/null & echo $! 

Se cerco processi in ssh con

 top 

vedo il mio process php5 con il pid corretto. l'utente è root

  PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 3533 xxxxxxxx 20 0 21356 8868 4580 S 0 0.4 0:00.13 php5 3536 xxxxxxxx 20 0 20836 8260 4428 S 0 0.4 0:00.09 php5 3539 xxxxxxxx 20 0 20836 8260 4428 S 0 0.4 0:00.09 php5 3542 xxxxxxxx 20 0 20836 8260 4428 S 0 0.4 0:00.09 php5 3545 xxxxxxxx 20 0 20836 8260 4428 S 0 0.4 0:00.09 php5 3548 xxxxxxxx 20 0 20836 8260 4428 S 0 0.4 0:00.09 php5 3551 xxxxxxxx 20 0 20836 8260 4428 S 0 0.4 0:00.09 php5 

se inizio il process manuale top appare così:

 PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 8141 xxxxxxxx 22 2 24048 9.9m 5344 S 10 0.5 0:00.31 php5 

Il problema: sembra che non accada nulla. Per eseguire il debug un po 'ho scritto un output nel file

 ob_start(); echo "STARTING..."; writeLog(ob_get_contents()); //... function writeLog($info){ $handle = fopen("file.log", "a+"); fwrite($handle, $info); fclose($handle); } exit; 

Nessun registro nel mio file. Se avvio questo file nel mio browser, esso viene elaborato correttamente e ottiene il mio file.log con le informazioni di "debug".

Perché questo funziona nel browser e non nel command exec / shell_exec ??! Ho esattamente questi processi php con pid corretto, ma nessun risultato.

Grazie mille per l'aiuto!

L'ambiente CLI PHP può essere diverso dall'ambiente web (mod_php, FCGI, qualunque sia). È ansible che uno script muoia con un errore quando viene eseguito dalla row di command e non quando lo si invoca tramite un server web. Esegui il debug del tuo script. Se puoi, SSH nel tuo server, su all'utente webserver ed esegui lo script direttamente dalla row di command.

Se non puoi farlo, configura il tuo server di sviluppo where puoi farlo (non è così difficile se conosci qualche Linux).

Ad exception del ansible problema di authorization, una risposta simile è pubblicata qui: https://stackoverflow.com/a/22705727/3471333 .

 nohup /usr/local/bin/php5 /.../../file.php </dev/null 2> /dev/null & echo $!