php sleep vs bash sleep

时间:2012-03-22 16:26:37

标签: php bash codeigniter sleep

我有一个PHP脚本,我需要每5秒运行一次(运行,等到它完成,等待5秒,再次运行)

我有两种方法可以做到这一点。在脚本中有一个infinte循环,其睡眠函数看起来像这样:

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

或者使用bash脚本来运行脚本并等待5秒钟。它看起来像那样

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

我想知道最有效的方法是什么。

我正在运行的php脚本是一个codeigniter控制器,可以执行大量的数据库调用..

3 个答案:

答案 0 :(得分:8)

如果你正在进行大量的数据库调用,那么在php中进行睡眠。这样你就不会支付php启动惩罚,连接到数据库的惩罚等等......如果你在bash中睡觉就会招致。

执行bash循环时,每次迭代都会启动/运行/退出脚本,并且这种开销会在长时间运行的脚本上快速增加。

另一方面,至少每次都会以“干净”的环境开始,并且不必担心脚本中的内存泄漏。您可能希望将两者结合起来,以便在PHP(例如)中循环/睡眠100次,然后在Bash中退出并循环。

答案 1 :(得分:1)

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

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

答案 2 :(得分:1)

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

数据库调用的数量似乎不太重要,因为您需要以这两种方式进行。从BASH运行脚本的成本是构建和删除CodeIgniter框架的时候。但CodeIgniter已经设计为在普通的Web应用程序中执行此操作并且执行速度足够快。