如何为 cron 作业编写集成测试?

如何为 cron 作业编写集成测试?

我有一系列的 cron 作业,我想以比以下更及时和自动化的方式对它们进行测试:

  1. 通过手动运行来单独测试各个作业。
  2. 安装作业并更新 crontab。
  3. 等待 cron 执行作业。
  4. 观察结果。

我认为以 root 身份运行测试脚本(当然是在开发环境中)并调整系统时钟可能会有所帮助。最佳做法是什么?

答案1

最佳实践是在开发环境中进行所有测试(您似乎已经知道)。

对于测试 cron 作业,我通常不喜欢摆弄系统时钟(您不能随便将时间移动到您想要的任何位置 - 您需要让时钟运行所有点以查看作业如何运行和相互作用。
您也不能只是加快时钟(x100)来使其更快:执行大量数字运算的 cron 作业不会更快,并且您可能会让它们自行(或相互)踩踏,具体取决于计划的情况。

我测试 cron 作业的标准如下:

  1. 通过手动运行来测试该作业。
    在这里彻底调试它,这样您以后就不会被 cron 电子邮件轰炸了。
  2. 安装作业,安排它从现在起 2-3 分钟后运行。
    • 观察从 cron 运行的结果(没有 tty)。
  3. 中断该作业所依赖的某些内容并安排它在几分钟后再次运行。
    • 观察对破损的反应(确保它符合您的要求)。
  4. 如果 (2) 和 (3) 中的作业运行正常,则安排其在正常时间运行。
    • 观察作业在正常时间运行的结果。
    • 如果工作运行正常,则将变更推广至生产。

实际上,有时你可以跳过第 4 步(如果你知道一项工作不会影响任何其他工作,并且您不必担心 CPU/RAM/磁盘负载问题)。


真的对 cron 作业进行集成测试时,您必须等待整整一年过去(夏令时变化),甚至可以说需要超过 4 年(闰年、闰秒等),但据我所知没有人这样做。请注意,有时 2:30 会发生不止一次(或根本不发生),并且并不总是 2 月 29 日,通常就没问题了。

答案2

  1. 以您想要以其权限运行的用户身份从命令行运行它。
  2. 始终记住,您应该在 crontab 中使用完整路径:-
    * * * * * /path/to/your/job >> /tmp/job.log 2>&1
  3. 检查job.log

相关内容