我如何编写cron作业的集成testing?

我有一系列的cron工作,我想比以下更及时和自动的方式来testing他们:

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

我正在考虑以root身份运行一个testing脚本(当然是在开发环境中),摆弄系统时钟可能是有益的。 什么是最佳做法?

最好的做法是在开发环境中完成所有的testing(您似乎已经知道)。

为了testingcron作业,我通常不喜欢使用系统时钟(你不能只是把时间花在任何你想要的地方 – 你需要让时钟贯穿所有点,看看作业是如何运行和互动的彼此。
你也不能只加速时钟(x100),以使其更快:cron作业,大量的数字处理不会更快,你可能让他们踩着自己(或彼此),取决于什么时间表看起来像。

我testingcron作业的标准如下:

  1. 通过手动运行来testing作业。
    在这里debugging一下,这样你就不会被cron电子邮件轰炸了。
  2. 安装作业,安排从现在开始运行2-3分钟。
    • 观察从cron运行的结果(没有tty)。
  3. 打破工作依赖的一些东西,并安排在几分钟内再次运行。
    • 观察反应破裂(确保它做你想要的)。
  4. 如果(2)&(3)中的作业运行正常,则安排它在正常时间运行。
    • 观察正常工作的结果。
    • 如果作业运行正常,则促使生产更改。

在实践中,有时您可以跳过第4步(如果您知道某个作业不会影响其他任何作业,并且不担心CPU / RAM /磁盘负载问题)。


真正对cron作业进行整合testing,你必须让整整一年(夏时制的变化),甚至需要超过4年(闰年,闰秒等)的争论,但没有人我知道这一点。 请注意,有时候2:30会发生不止一次(或者根本不会发生),并且2月29日并不总是这样,而且你通常都很好。

  1. 以命令行的身份运行它,并将其作为要运行其权限的用户。
  2. 请记住,您应该使用crontab中的完整path: –
      * * * * * / path / to / your / job >> /tmp/job.log 2>&1 
  3. 检查job.log