作为使用cron作业的可能替代方案,我找到了睡眠功能。我以前从未用过这个。
如果我告诉我的脚本在一个循环中运行,并且在该循环内我有这样的指令
# sleeps for 86400 seconds or one day
sleep(86400);
我的脚本会在1天后重新启动吗?即使在那段时间内不再在我的网络浏览器上访问它? 我认为这是不可能的,但我在这里问一位专家。
答案 0 :(得分:2)
脚本将超时。您需要对其进行设置,以便使用set_time_limit
不会超时。
答案 1 :(得分:2)
我不会这样做如果作为常规任务我会使用cron
(这是一个链接)作业,或者如果作业是at
(这是一个链接)作业在脚本的运行时添加。
cron允许您每天下午1点运行一个定期工作,例如,允许您安排一个工作现在运行一次+例如1天。
如果您选择沿着该路线行驶,我已为该队列写了PHP 5.3 wrapper。它可以在GitHub https://github.com/treffynnon/PHP-at-Job-Queue-Wrapper
上找到答案 2 :(得分:2)
以这种方式使用PHP的主要问题是,根据我的经验,不是Web服务器超时(有很多方法可以解决服务器和平台上的变化)但内存泄漏。
简单的PHP代码往往会泄漏很多的内存;在我做了一些分析并放置了一些unset
之后,我写的大部分脚本能够完成数百倍的工作。我从来没有能够以这种方式防止所有泄漏。我还被告知标准库中存在内存泄漏,如果这是真的,则无法编写将在循环中长时间运行的守护进程。
答案 3 :(得分:2)
还有time_sleep_until()
。在特定时间醒来可能更有用......
答案 4 :(得分:1)
如果您通过网络浏览器访问该脚本,它将在30秒后终止。
如果您在命令行上启动PHP脚本,这可能会有效。
答案 5 :(得分:1)
它会起作用,但你的“启动时间”会受到影响。假设你的工作需要10秒才能运行,然后再睡86400,再运行10,睡86400等等。你准确地在第1天的午夜开始它。在第2天它将在凌晨12:00:10运行,当天3现在是上午12点半,等等...
你可以在内部做一些花哨的数学来弄清楚跑步花了多长时间,并从下一次睡眠呼叫中减去它,但在这一点上,为什么不使用cron?使用cron,脚本将在每次运行后退出,清理使用的内存和资源。使用您的睡眠方法,您必须非常小心,不要在某处泄漏资源,否则事情最终会陷入停滞。
答案 6 :(得分:0)
之前我遇到过类似的问题,发现了一个php cron解析类,它允许你执行类似于运行crons的php。如果您无权直接运行crons,则可以将其绑定到站点上常用的脚本。
我实际上将此脚本用作更大的cron作业脚本的一部分:
cronParser类是here。
答案 7 :(得分:0)
许多正确的答案,但是:使用sleep()意味着您的脚本继续运行,并继续使用内存。提高默认超时30秒将起作用,但同样,这是个坏主意。我建议你使用crontasks。
答案 8 :(得分:0)
这就是为什么合法的cron工作被发明的原因。只需使用crontab
即可。使用PHP脚本执行它将是非常可靠的,错误的,并且定时很差。
希望这是有见地的。