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 $!