循环PHP脚本

时间:2009-07-13 20:44:44

标签: php cron infinite-loop

我有一个PHP脚本,用于检查目录并删除15秒内未修改的任何文件(这是游戏)。

我的问题是如何让这个脚本一直运行。我设置了一个每10分钟运行一次的cron作业,然后在PHP脚本中我有一个无限循环的睡眠(10)。我的想法是它会每10秒运行一次代码,如果脚本停止,cron作业最终会重新启动它。

然而,在脚本启动后,它会运行大约3个循环(30秒)然后停止。我听说PHP每个文件加载只能获得如此多的内存。

如何让这个PHP脚本无限循环?也许有一些方法可以自称

6 个答案:

答案 0 :(得分:4)

您可以运行一个父PHP进程,该进程以一定间隔分叉客户端。如果你对将它作为一个选项进行探索感到好奇,这是一个很好的起点:http://ca2.php.net/pcntl这样做的好处是父进程可以杀死在合理的时间内没有结束的客户端pid。

如果你正在寻找快速和肮脏的东西,你可以写一个bash脚本来轻松调用php(如果你在Linux上):

#!/bin/bash
while [ "true" ]; do
        /path/to/script.php
        sleep 15
done

修改的 你甚至不需要脚本,bash会在一行上完成所有操作:

while [ "true" ]; do /path/to/script.php; sleep 15; done

答案 1 :(得分:2)

您可能想要检查php.ini文件中的max_execution_time参数。我相信默认值是30秒。你使用cron设置它的方式,你可能会在10分钟后运行多个脚本实例,除非你在脚本中添加一些逻辑来检查它自己的实例是否还没有运行

答案 2 :(得分:2)

确保编译PHP可执行文件以用作命令行解释器,而不是CGI可执行文件。 PHP通常会杀死运行时间超过max_execution_time的脚本(默认为30秒)。但是,CLI可执行文件不会强加此限制。

More info about CLI vs. CGI SAPIs.

您可以使用--version参数检查可执行文件的SAPI:

$ php --version
PHP 4.3.0 (cli), Copyright (c) 1997-2002 The PHP Group
Zend Engine v1.3.0, Copyright (c) 1998-2002 Zend Technologies

答案 3 :(得分:1)

PHP作为一种语言不能无限期地运行。 由于你每十分钟就有一个cron-job,为什么不执行你的任务60次然后退出?

此外,PHP在大多数Linux服务器上都有不同的CLI配置文件和apache模式。 所以检查你的etc / php / cli / php.ini并检查最大执行时间和内存限制可能是明智的。

答案 4 :(得分:0)

每隔一段时间(在内存不足之前)就会突破循环并重新执行 exec(“/ usr / bin / php”。 FILE );

答案 5 :(得分:0)

有一个PEAR module用于编写长时间运行的PHP脚本。我自己没用过它。