nohup: запустить процесс PHP в фоновом режиме

Я пытаюсь запустить процессы php в фоновом режиме и запустить это из файла php.

некоторые сведения: PHP версии 5.2.17, php safe_mode выключен, система linux. Я начинаю процесс с exec, пробовал уже shell_exec. Я установил все файлы на 0755, 0777.

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

если я напечатаю это заявление, я получу это, и pid в порядке:

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

если я ищу процессы под ssh с

top

Я вижу свой процесс php5 с правильным pid. пользователь 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    

если я начну процесс ручной сверху выглядит так:

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 

проблема: кажется, ничего не происходит.Чтобы немного отладить, я написал вывод в файле

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

в моем файле нет журналов. Если я запускаю этот файл в своем браузере, он правильно обрабатывает и получает мой файл.войдите в систему с информацией "отладка".

почему это работает в браузере, а не в команде exec/shell_exec??! у меня есть именно эти php процессы с правильным pid, но без результата.

большое спасибо за помощь!

2 ответов


среда php CLI может отличаться от веб-среды (mod_php, FCGI, что угодно). Сценарий вполне может умереть с ошибкой при запуске из командной строки, а не при вызове его через веб-сервер. Отладьте свой сценарий. Если вы можете, SSH на ваш сервер, su для пользователя веб-сервера и запустить скрипт из командной строки самостоятельно.

Если вы не можете этого сделать, настройте свой собственный сервер разработки, где вы можете это сделать (это не так сложно, если вы знаете некоторые Linux.)


за исключением возможной проблемы с разрешением, аналогичный ответ размещен здесь -https://stackoverflow.com/a/22705727/3471333.

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