我有一个PHP脚本,我需要每5秒运行一次(运行,等到它完成,等待5秒,再次运行)
我有两种方法可以做到这一点。在脚本中有一个infinte循环,其睡眠函数看起来像这样:
while (1)
{
do_stuff();
sleep 5;
}
或者使用bash脚本来运行脚本并等待5秒钟。它看起来像那样
while [ 1 ]; do
php script.php &
wait
sleep 5
done
我想知道最有效的方法是什么。
我正在运行的php脚本是一个codeigniter控制器,可以执行大量的数据库调用..
答案 0 :(得分:8)
如果你正在进行大量的数据库调用,那么在php中进行睡眠。这样你就不会支付php启动惩罚,连接到数据库的惩罚等等......如果你在bash中睡觉就会招致。
执行bash循环时,每次迭代都会启动/运行/退出脚本,并且这种开销会在长时间运行的脚本上快速增加。
另一方面,至少每次都会以“干净”的环境开始,并且不必担心脚本中的内存泄漏。您可能希望将两者结合起来,以便在PHP(例如)中循环/睡眠100次,然后在Bash中退出并循环。
答案 1 :(得分:1)
通常所有PHP脚本都有超时 - 除非您从CLI运行 - 因此您的第一个方法将工作30到60秒(取决于您的服务器配置),然后将被强制终止。
我倾向于建议使用命令行选项或者甚至(这取决于您希望代码运行的频率)cron命令来执行它。
答案 2 :(得分:1)
这可能取决于系统正在做什么。我认为系统可以更好地处理BASH解决方案,以释放其他应用程序的资源。
数据库调用的数量似乎不太重要,因为您需要以这两种方式进行。从BASH运行脚本的成本是构建和删除CodeIgniter框架的时候。但CodeIgniter已经设计为在普通的Web应用程序中执行此操作并且执行速度足够快。