Intereting Posts
Как я могу наложить водяной знак на уже измененный образ на PHP (используя GD)? PHP Обработка ошибок: die () Vs trigger_error () Vs throw Exception Ошибка обработки MySQLi? Обновить страницу при изменении содержимого каталога Сохранить выбранную опцию в выпадающем меню в php создание события календаря Google Как написать SQL-запрос, который подсчитывает количество строк в месяц и год? Сохраните изображение из Flash, отправьте его на PHP и верните URL-строку во Flash Сделать изображение (изображение на изображение) определенной шириной, но неограниченной длиной? PHP mySQL проверяет, находятся ли имя пользователя и пароль в базе данных PHP служит MP4 – Chrome «Предварительные заголовки показаны / запрос еще не закончен» ошибка Капистрано: HowTo развертывать базу данных MySQL для PHP-приложения? Какие проверки следует использовать для предотвращения прямого доступа к страницам (с использованием PHP)? Обновление нескольких индикаторов выполнения при отправке нескольких файлов и элементов формы через ajax PHP try / catch и фатальная ошибка

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

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

Некоторая информация: PHP Version 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; 

В моем файле нет журналов. Если я запустил этот файл в своем браузере, он корректно обработает и получит файл file.log с информацией об отладке.

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

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

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

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

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

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