我希望脚本在上午 8 点到晚上 8 点之间的白天随机运行 30 秒到 1 分钟。
有什么能阻止我一次打开一个 PHP 脚本,循环睡眠 30-60 秒?然后它会检查时间是否在早上 8 点到晚上 8 点之间?
与 Cron 工作相比,这样做有什么缺点?Cron 作业可以随机运行吗?
缺点是,它们永远运行。如果它失败了,你可能不会立即意识到它,如果你构建它错误,它将消耗大量内存和 cpu 而不会释放它。使用 cronjobs 时,您可以肯定,它会在每次需要时启动一个全新的进程。
附加:设置 cronjob 非常容易,为什么不呢?
0,30 8-18 * * * php myscript.php
绝对 max_execution_time 可以阻止您(如果您的主机不允许您将其设置为无穷大)。睡眠时间没有考虑在内,但一段时间后你仍然可以达到限制。
您可以在 php.ini 中实现这样一个持久的方案。它可以工作(前提是您从命令行使用 php ......)。唯一可能是次要缺点的是在发生故障时无法恢复。这在使用 cron 作业时会有所不同:只需启动一个新进程。然而,这显然会引入其他风险,因此没有“更好”的方法。
Cron 不能随机启动进程。但是,您可以以固定的时间间隔开始您的进程并使用随机长度的初始睡眠命令。那应该有同样的效果。