Cronjob - 如何以正确的方式做到这一点?

Max*_*Max 7 php cron

对应用程序的一个非常普遍的需求是每X分钟/小时运行一个脚本.基本上它没什么复杂的,只是一些PHP代码和一个crontab条目.

虽然我在过去几年中写过很多这些cronjobs,但我还没有看到任何最佳实践,至少没有那么多.与每次"后台处理"一样,许多事情都可能出错,尤其是在生产环境中.

其中:

  • 执行cron期间发生错误,脚本处理了一半的数据
  • cronjob意外地由另一个进程/用户错误/无论如何开始两次
  • cronjob比预期的时间更长,虽然没有完成处理数据,但脚本再次被调用
  • 等等

编写坚如磐石,强大的cronjob脚本有哪些最佳实践?编写一个锁定文件,断言只有一个实例运行,在oder中进行大量的日志记录和监控,以防止发送数千个重复的电子邮件?你有什么想法?

Gol*_*wby 2

就我个人而言,我处理错误的方法是简单地将 STDERR 发送到日志文件,然后定期检查该文件。一个简单的方法是将 2>/pathtolog 附加到 crontab 条目。

至于运行同一程序的重复项,我更喜欢让脚本尝试锁定某些内容(文件或本地网络端口)。如果无法获得该锁,则脚本不会运行。这样,如果现有脚本当前正在运行,则新脚本无法获得相同的锁。