![如何为 cron 作业编写集成测试?](https://linux22.com/image/561546/%E5%A6%82%E4%BD%95%E4%B8%BA%20cron%20%E4%BD%9C%E4%B8%9A%E7%BC%96%E5%86%99%E9%9B%86%E6%88%90%E6%B5%8B%E8%AF%95%EF%BC%9F.png)
我有一系列的 cron 作业,我想以比以下更及时和自动化的方式对它们进行测试:
- 通过手动运行来单独测试各个作业。
- 安装作业并更新 crontab。
- 等待 cron 执行作业。
- 观察结果。
我认为以 root 身份运行测试脚本(当然是在开发环境中)并调整系统时钟可能会有所帮助。最佳做法是什么?
答案1
最佳实践是在开发环境中进行所有测试(您似乎已经知道)。
对于测试 cron 作业,我通常不喜欢摆弄系统时钟(您不能随便将时间移动到您想要的任何位置 - 您需要让时钟运行所有点以查看作业如何运行和相互作用。
您也不能只是加快时钟(x100)来使其更快:执行大量数字运算的 cron 作业不会更快,并且您可能会让它们自行(或相互)踩踏,具体取决于计划的情况。
我测试 cron 作业的标准如下:
- 通过手动运行来测试该作业。
在这里彻底调试它,这样您以后就不会被 cron 电子邮件轰炸了。 - 安装作业,安排它从现在起 2-3 分钟后运行。
- 观察从 cron 运行的结果(没有 tty)。
- 中断该作业所依赖的某些内容并安排它在几分钟后再次运行。
- 观察对破损的反应(确保它符合您的要求)。
- 如果 (2) 和 (3) 中的作业运行正常,则安排其在正常时间运行。
- 观察作业在正常时间运行的结果。
- 如果工作运行正常,则将变更推广至生产。
实际上,有时你可以跳过第 4 步(如果你知道一项工作不会影响任何其他工作,并且您不必担心 CPU/RAM/磁盘负载问题)。
到真的对 cron 作业进行集成测试时,您必须等待整整一年过去(夏令时变化),甚至可以说需要超过 4 年(闰年、闰秒等),但据我所知没有人这样做。请注意,有时 2:30 会发生不止一次(或根本不发生),并且并不总是 2 月 29 日,通常就没问题了。
答案2
- 以您想要以其权限运行的用户身份从命令行运行它。
- 始终记住,您应该在 crontab 中使用完整路径:-
* * * * * /path/to/your/job >> /tmp/job.log 2>&1
- 检查
job.log
。