我的网络服务器中有两个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区域的周日中午也停止。
答案 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/。