2012-03-22 94 views
2

我有一个PHP脚本,我需要每5秒运行(运行,等待,直到它完成,等待5秒钟,然后再次运行)PHP睡眠VS庆典睡眠

我做这件事的两个方面。要么必须在脚本有休眠功能的infinte循环,看起来就像是:

while (1) 
{ 
    do_stuff(); 
    sleep 5; 
} 

或有bash脚本,将运行脚本并等待5秒钟。它看起来像

while [ 1 ]; do 
    php script.php & 
    wait 
    sleep 5 
done 

我想知道什么是最有效的方式来做到这一点。

PHP脚本我运行是一个笨控制器,做了很多的数据库调用..

回答

8

如果你做了很多的DB调用,然后做PHP中的睡眠。这样你就不会支付PHP的启动罚款,连接到数据库的处罚等等,如果你在bash中睡觉,就会发生这种情况。

当你做bash循环时,你会在每次迭代时启动/运行/退出你的脚本,并且这个开销会在长时间运行的脚本上快速累积。另一方面,至少你每次都会从一个“干净”的环境开始,而不必担心脚本中的内存泄漏。您可能希望将两者结合起来,以便在PHP(例如)中循环/睡眠100次,然后退出并在Bash中循环。

1

通常,所有的PHP脚本都有超时 - 除非你是从CLI运行 - 所以你的第一个方法将工作30到60秒(取决于你的服务器配置),然后将被强行终止。

我倾向于建议一个命令行选项,或者甚至(这取决于您希望代码运行的频率)cron命令来执行它。

+0

它当然会从命令行运行。超时并不是问题 – applechief 2012-03-22 16:46:56

1

这可能取决于系统正在做什么。我认为系统可以更好地处理BASH解决方案,以释放其他应用程序的资源。

数据库调用的次数似乎不那么重要,因为您需要做出这些调整。从BASH运行脚本的成本是构建和剥离CodeIgniter框架的时间。但CodeIgniter已经被设计为在一个普通的Web应用程序中执行此操作,并且执行速度足够快。