2011-01-30 60 views
0

是否有可能运行PHP脚本,以便它可以全天候运行,并在发生崩溃或任何情况下都会重新启动?它不应该在浏览器中打开,但通过cron以某种方式在服务器端运行...它在Windows服务器上。PHP脚本全天候运行

+2

你可能想要考虑一些不是用PHP写的东西...... PHP不是为这样的工作而设计的,其他语言可能为流程和线程管理等长时间运行的流程提供更好的框架功能(并且可能会节省CPU资源和能力,取决于你如何开发整个事物)。或者如果可以的话,让它通过cron运行,并使其成为一个短期运行的过程(这可以在小工作单元中工作,但仍然必须确保它不会同时运行,例如使用PHP的`flock()` )。 – Archimedix 2011-01-30 09:37:06

+0

使用PHP以外的东西的+1。工作的错误工具。 – Spudley 2011-01-31 16:36:45

回答

0

运行两个脚本 - 每个人会去检查第二个,如果它是活的:-) - 和关闭时间限制在php.ini

0

有正在运行的每n分钟一个脚本。它应该做的第一件事是检查它是否已经在运行。如果是,则新脚本退出。

一旦检查完成,请执行一些操作来标记脚本的存在。标准是将您的pid写入指定位置。然后检查功能可以:

  1. 验证pid文件是否存在。没有文件,没有运行脚本。
  2. 验证文件中指示的pid正在运行。没有运行pid,没有运行脚本。

有一个很小的机会,你会得到正在运行的文件的误报。例如,您的脚本获得12345的pid。当它死亡时,系统已经循环了所有可能的pid。现在,另一个进程使用pid 12345. pidfile将包含'12345';您的脚本将验证具有该编号的进程是否正在运行,请参阅新进程,并假设脚本正在执行。

这可能是解决最后一个问题的方法,但我不知道。

0

是的可能 - 但标准的引用计数内存管理器将无法应付复杂的对象链接。您可能需要重新编译以启用循环引用检查垃圾回收器。

更好的解决方案是运行快速完成的脚本 - 并使用调度程序频繁运行它(但要考虑在上一次执行完成之前如何启动实例)。

或者,您可能想要在随机的基础上处理由HTTP请求触发的所需处理 - 但在HTTP请求的同步部分完成之后(请阅读垃圾回收在会话管理中如何工作)。

如果知道该脚本的目的是什么会有帮助。

-1

在Windows服务器上,您不会创建cron作业,相当于可用于自动运行脚本的Task Scheduler。

就像其他文章已经说过的那样,创建一个运行时间很短,但可以每小时调用一次的php脚本是最好的方法。如果您真的需要一个真正运行24/7的程序,您需要一些方法将代码编译为二进制文件。最好的选择是C++或Java。