Cron作业调度

Cron作业调度,cron,Cron,我的web服务器中有两个Cron作业- */5 0-3 * * 0-4 [my job] */5 19-23 * * 0-4 [my job] 我们在GMT+6时区,服务器在GMT-8时区。我们希望作业能够运行- 星期日至星期五 格林尼治标准时间+6时区(办公时间)上午9时至下午5时 每5分钟一次 但cron作业似乎在周五运行,也在周日中午GMT+6时区停止。我不知道有什么简单的方法可以更改时区。一些较旧版本的cron支持名为cron

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

*/5     0-3     *   *   0-4     [my job]
*/5     19-23   *   *   0-4     [my job]
我们在GMT+6时区,服务器在GMT-8时区。我们希望作业能够运行-

星期日至星期五 格林尼治标准时间+6时区(办公时间)上午9时至下午5时 每5分钟一次


但cron作业似乎在周五运行,也在周日中午GMT+6时区停止。

我不知道有什么简单的方法可以更改时区。一些较旧版本的
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的替代方案没有太多的建议 这篇文章帮助了我

  • 对于debian linux,首先启动dpkg重新配置tzdata
  • 将/etc/localtime链接到相应的zoneinfo文件
  • 重新启动cron守护进程
    请将所有代码和输出缩进四个空格,以便所有内容的格式正确。这次我已经为您修复了它。一些版本的cron支持一个名为
    cron_TZ
    的变量。也许这会有帮助。这对我有帮助:我会自己做算术,只使用服务器的时间透视图。你也可以更改服务器的时区:谢谢你的回答。这很有帮助。但我认为第一行应该是*/5 19-23**6[我的工作]——因为我应该在周六晚上开始。