PHP脚本永远工作:)

时间:2012-02-04 17:26:50

标签: php daemon

我正在寻找一些想法来做以下事情。我需要PHP脚本来执行某些操作很长一段时间。这是CMS的扩展,除了PHP之外,这不是别的。它也不能是命令行脚本,因为它应该由只有CMS的标准方法的普通人使用。其中一个选择是拥有一个cron作业(大多数简单的托管都有它),它会经常触发脚本,这样它就可以一步一步地执行动作,从一个启动到下一个启动状态。这不是完美的,但我看不到任何其他解决方案。如果脚本将重定向到自身,则服务器将中断它。还有哪些其他选择?

提前感谢大家!

2 个答案:

答案 0 :(得分:2)

你所说的是一个守护进程或长时间运行的程序,它等待客户端程序的调用,执行和操作,提供响应,然后继续等待更多的调用。

您可能熟悉这些以Apache& MySQL;)无论如何PHP在这方面通常都没问题,它确实能够在原始套接字上运行以及fork子进程同时处理多个请求。

说过PHP守护进程是YMMV的工具。有些人会说他们工作得很好,像我这样的其他人会说,即使在过多的unset()调用中,他们也会遇到进程间通信和内存泄漏的问题。

无论如何,您可能无法在共享托管环境中部署任何类型的守护程序。您需要获得更好的服务器包或坚持使用基于Cron的解决方案。

Here's a link关于编写PHP守护进程。

另外,还有一点需要注意。守护进程确实会不时崩溃,因此您可能仍需要存储有关最新情况的状态,以防万一有人通过电源线跳过共享服务器:)

答案 1 :(得分:1)

我还建议您考虑将其作为守护进程,但如果没有,那么您可以简单地使用

 set_time_limit(0);
 ignore_user_abort(true); 

在顶部告诉它不要超时,不要被任何事情打断。然后从cron调用它来每天启动它或其他任何东西。我有许多长时间处理日常任务,这对我很有用。但是,它将无法轻松地与外界交谈(其他脚本无法查询它或任何东西 - 如果这是您想要查看的PHP服务)所以一旦你运行它确保它会停止和让它将进度打印到日志文件。