PHP,完成后重新运行代码

时间:2013-03-26 13:26:44

标签: php daemon

我正在开发一个PHP服务,它为每个客户执行大量操作,我希望它能够持续运行。我已经看过cron,但据我所知,cron使得在设定时间运行代码成为可能。这可能有点危险,因为我们依赖于代码在重新开始之前已经完成运行,并且每次运行的时间可能随着客户群的增加而变化。因此,据我所知,刷新,cron或其他定时间隔不能完成。

所以我想知道你是否知道我可以在完成后重启服务的任何解决方案,并且在所有代码执行之前都不会重新运行?

我很抱歉,如果之前已经回答过,或者很容易在谷歌上找到,我试图找到一些东西,但无济于事。

编辑:我可以将时间间隔设置为1小时,绝对确定,但我想在每次运行之间尽可能少的时间。

4 个答案:

答案 0 :(得分:1)

看看这个: http://www.godlikemouse.com/2011/03/31/php-daemons-tutorial/

你需要的是一个持续运行的守护进程。循环时有更多的解决方案。

以下我曾在项目中使用过:http://kvz.io/blog/2009/01/09/create-daemons-in-php/,它也是PEAR的一个包:http://pear.php.net/package/System_Daemon

有关详细信息,请参阅以下SO链接:

什么是守护程序:What is daemon? Their practical use? Usage with php? 使用方法:PHP script that works forever :)

答案 1 :(得分:0)

您是否尝试过将PHP脚本作为一个进程运行。这里有更多详细信息http://nsaunders.wordpress.com/2007/01/12/running-a-background-process-in-php/

答案 2 :(得分:0)

如果您不想学习如何编写守护程序代码,我建议使用管理用户区域流程的软件:主管http://supervisord.org/

您只需编写配置文件即可指定要运行的进程以及操作方式。 它配置起来非常简单,并且非常适应(您可以强制只有一个进程实例,或者具有固定数量的实例......等)。 它还将处理脚本崩溃和记录时的自动重启。

在PHP方面,只需创建一个永不退出的脚本,使用while(true) { ... }循环,并在supervisord的conf中添加这样的条目:

[program:your-script]
command=/usr/bin/php /path/to/your_script.php

我正在为一些项目使用该软件(为网站运行ruby和php gearman异步工作者)。

答案 3 :(得分:-1)

尝试使用自定义逻辑,您可以在其中设置ON和OFF标志,在CRON中,您可以在运行其中的代码之前进行检查。我想建议像基于队列的解决方案,一旦你得到条目,然后运行你的处理逻辑。哪个可以是守护进程或cron。如果您的任务现在可以执行,它将提供更多控制。编辑了