我知道有很多关于这个主题的帖子,但那里提到的所有解决方案似乎都不适合我。
我正在构建一个聊天客户端,我想在后台运行一个进程,它将监听我帐户中的传入消息。
代码如下:
$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 & or > testoutput.php 2>&1 & echo $! (来自该论坛上的各种帖子),但没有成功。有没有人知道应该如何解决这个问题?
最佳答案
我有一个工作版本。但不是使用 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();
关于php - 如何使用 PHP exec (linux) 启动后台进程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6774406/