Как запустить фоновый процесс с помощью PHP exec (linux)? - PullRequest
1 голос
/ 21 июля 2011

Я знаю, что есть много сообщений на эту тему, но все упомянутые решения, похоже, не работают для меня.

Я создаю чат-клиент и хочу, чтобы процесс работал в фоновом режиме, который будет прослушивать входящие сообщения в моей учетной записи.

Вот код:

$command = "cd classes/chat/inc/ && /usr/bin/php5 client.php --mysql_server=localhost --mysql_username=root --mysql_password= --mysql_database=covide --gtalk_user=xxx --gtalk_password=xxx --user_id=".$_SESSION['user_id']." &> /dev/null &";
exec($command);

Я попробовал лот опционов вместо этого:

&> /dev/null &

like> / dev / null 2> / dev / null & или> testoutput.php 2> & 1 & echo $! (из разных постов на этом форуме), но безуспешно. У кого-нибудь есть идеи о том, как это следует исправить?

Ответы [ 2 ]

2 голосов
/ 21 июля 2011

У меня есть рабочая версия только этого.Но вместо использования exec ();мы используем curl POST для запуска нашего фонового процесса.Проблема заключается в ограничении времени ожидания.Что вы можете сделать, так это запустить фоновый процесс с помощью задачи «прослушать входящие сообщения», затем в конце вызвать другой экземпляр самого себя и закрыть текущий экземпляр.

Вы можете использовать что-то подобное в началевашего процесса, чтобы убедиться, что он не завершится преждевременно, но я не обнаружил, что это было необходимо, он работал нормально, даже если не было выполнено следующее:

/* Close our connection with calling file */
while(ob_get_level()) ob_end_clean();
header('Connection: close');
ignore_user_abort();
ob_start();
echo('Running in the background.');
$size = ob_get_length();
header("Content-Length: $size");
ob_end_flush();
flush();
0 голосов
/ 02 декабря 2016

Следующая команда должна немедленно вернуться:

exec('nohup php otherscript.php > nohup.out & > /dev/null');

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

...