我有一个php脚本,我需要每5秒运行一次(运行,等到它完成,等待5秒,再次运行)
或者在脚本中有一个无限循环,其中包含一个如下所示的睡眠函数:
while (1)
{
do_stuff();
sleep 5;
}或者让bash脚本运行该脚本并等待5秒。它看起来会是这样的
while [ 1 ]; do
php script.php &
wait
sleep 5
done我想知道做这件事最有效的方法是什么。
我正在运行的php脚本是一个codeigniter控制器,它执行大量的数据库调用。
发布于 2012-03-23 00:28:54
如果你正在做大量的DB调用,那么在php中进行睡眠。这样你就不会为php启动带来的损失,连接到数据库的损失,等等……如果你在狂欢中睡觉的话就会发生这种情况。
当您执行bash循环时,您将在每次迭代中启动/运行/退出脚本,对于长时间运行的脚本来说,这种开销很快就会增加。
另一方面,至少你每次都会有一个“干净”的环境,并且不必担心你的脚本中的内存泄漏。您可能希望将两者结合起来,以便在PHP中循环/睡眠100次(比如),然后在Bash中退出并循环。
发布于 2012-03-23 00:29:49
通常,所有PHP脚本都有超时--除非您是从CLI运行--所以第一种方法将工作30到60秒(取决于您的服务器配置),然后被强制终止。
我倾向于建议使用命令行选项,或者甚至使用cron命令(这取决于您希望代码运行的频率)来执行它。
发布于 2012-03-23 00:34:29
这可能取决于系统还在做什么。我认为BASH解决方案可以由系统更好地处理,以便为其他应用程序释放资源。
数据库调用的数量似乎并不那么重要,因为无论采用哪种方式,您都需要执行这些操作。从BASH运行脚本的成本是构建和剥离CodeIgniter框架所需的时间。但CodeIgniter已经被设计为在普通的web应用程序中做到这一点,并且执行得足够快。
https://stackoverflow.com/questions/9826487
复制相似问题