0

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

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

很抱歉,如果以前回答过这个问题或者在 Google 上很容易找到,我已经尝试找到一些东西,但无济于事。

编辑:绝对可以肯定,我可以将定时间隔设置为 1 小时,但我希望每次运行之间的时间尽可能短。

4

4 回答 4

1

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

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

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

有关更多信息,请参阅以下 SO 链接:

什么是守护进程:什么是守护进程?它们的实际用途?与php一起使用? 如何使用:永远有效的 PHP 脚本 :)

于 2013-03-26T13:30:11.367 回答
0

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

于 2013-03-26T13:33:27.487 回答
0

如果您不想学习如何编写守护程序,我建议您使用管理用户态进程的软件:Supervisor ( http://supervisord.org/ )

您只需要编写一个配置文件来指定要运行哪些进程以及如何运行。它的配置非常简单,而且适应性非常强(您可以强制只有一个流程实例,或者改为拥有固定数量的实例......等等)。如果您的脚本崩溃,它还将处理自动重启和日志记录。

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

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

我在几个项目的生产中使用该软件(为网站运行 ruby​​ 和 php gearman 异步工作者)。

于 2013-03-26T13:37:29.130 回答
-1

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

于 2013-03-26T13:28:31.587 回答