Cron工作调度

3

我在我的Web服务器上有两个Cron作业 -

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

我们处于GMT+6时区,服务器位于GMT-8时区。我们希望工作运行时间为:

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

但似乎cron工作仅在周五运行,并且在周日中午停止在GMT+6时区。


1
请将所有代码和输出缩进四个空格,以便格式正确。这次我已经为您修复了它。 - Mikel
一些版本的cron支持一个名为CRON_TZ的变量。也许这可以帮助解决问题。 - Mikel
这个对我很有帮助:http://www.thegeekstuff.com/2011/07/cron-every-5-minutes/ 我会自己计算时间并使用你的服务器的视角。 - isomorphismes
2个回答

2

我不知道有什么简单的方法可以更改时区。一些旧版本的cron支持称为CRON_TZ的环境变量,但当前版本的cron似乎不支持。

因此,您需要将时间转换为系统时间。

我认为您已经正确计算了时间和日期,但是您需要将它们放在一起。例如,在UTC + 6上的星期四下午5点是在UTC-8上的星期四凌晨3点,但是您的规则没有在星期四运行任何内容。

根据我的计算,您需要:

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的建议并不多,有一个cron的替代方案

您还可以更改服务器的时区:http://www.wikihow.com/Change-the-Timezone-in-Linux - B_.
谢谢你的回答,帮了我很大的忙。但是我认为第一行应该是 */5 19-23 * * 6 [我的工作] - 因为我应该从周六晚上开始。 - Mahmudul Islam

2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接