永久运行PHP中的后台进程

时间:2013-11-02 12:50:30

标签: php mysql exec background-process

我正在使用MySQL为PHP应用程序创建一个Web服务。我想不断检查是否有任何数据可用。我不知道如何将数据作为后台进程。如何在没有任何请求或没有调用文件的情况下执行查询?

我搜索了一些像

这样的代码
$command = "php -d max_execution_time=50 -f myfile.php '".$param."' >/dev/null &";
exec($command);

但是我应该在哪里放置此代码,以便此查询将连续运行?

1 个答案:

答案 0 :(得分:3)

是的,&符号技巧会起作用。您可以使用supervisord之类的东西每隔几个小时重新启动它,以便处理任何内存泄漏。如果崩溃或挂起,这也会使它不那么脆弱。

此外,你可以使用像cron之类的东西来运行一个任务10分钟,然后死掉并等待cron再次启动它 - 请记住,对于大多数后台任务,如果有一个短路并不重要期间任务没有运行,因为它会赶上来。在每次运行中都值得检查前一个运行是否仍在运行,如果是,则提前退出:这样,在从数据库中检索工作时,没有两个后台任务导致竞争条件。

最后,您可以使用作业服务器,例如Gearman。这将允许您以异步方式向其发送任务,并且它们将由工作人员任务(按时间或优先级顺序)运行。这可能是最可靠的方法,但设置需要更多的工作。这是一个PHP模块,但根据我的经验,使用它比Net_Gearman, which is available in PEAR更麻烦。