Cron作业调度

时间:2011-02-20 08:37:02

标签: cron

我的网络服务器中有两个Cron作业 -

*/5     0-3     *   *   0-4     [my job]
*/5     19-23   *   *   0-4     [my job]

我们处于GMT + 6时区,服务器处于GMT-8时区。我们希望这项工作能够运行 -

周日至周五 GMT + 6时区上午9点至下午5点(办公时间) 每隔5分钟

但似乎cron工作在星期五运行,并且在格林尼治标准时间+6区域的周日中午也停止。

2 个答案:

答案 0 :(得分:2)

我不知道任何改变时区的简单方法。某些旧版本的cron支持名为CRON_TZ的环境变量,但cron的当前版本似乎不支持。

所以你必须将时间转换为系统时间。

我认为你已经正确地计算了时间,并且正确地计算了日期,但你必须把它们放在一起。例如,星期四下午5点UTC + 6是星期四凌晨3点,UTC-8,但你的规则周四没有运行任何东西。

根据我的计算,你想要:

Sunday 0900-1700 UTC+6 = Saturday 1900-2400 and Sunday 0000-0300 UTC-8
Monday 0900-1700 UTC+6 = Sunday 1900-2400 and Monday 0000-0300 UTC-8
...
Thursday 0900-1700 UTC+6 = Wednesday 1900-2400 and Thursday 0000-0300 UTC-8
Friday 0900-1700 UTC+6 = Thursday 1900-2400 and Friday 0000-0300 UTC-8

您将在crontab中表达为:

*/5   19-23   *   *   0   [my job]
*/5   0-3,19-23 * *   1-4 [my job]
*/5   0-3     *   *   5   [my job]

然而,这种解决方案感觉并不好。

夏令时变化会发生什么?您需要更新crontab吗?

如果您拥有root访问权限,可以修改/etc/init.d/cron条目,然后将TZ=America/Los_Angeles或类似代码添加到其中?

当然,这个解决方案听起来也很糟糕,特别是如果其他人使用该系统。如果你这样做,也可以改变系统的时区。

不幸的是,对cron的替代品没有太多建议 alternative to cron?

答案 1 :(得分:2)

这篇文章帮助了我http://starikovs.com/2011/12/21/cron-timezone-problem/

  1. 如果是debian linux,首先启动dpkg-reconfigure tzdata。
  2. 将/ etc / localtime链接到相应的zoneinfo文件。
  3. 重新启动cron守护程序。