cron 时区陷阱 - 避免定时任务的漂移
以本地时间配置的 cron 任务在夏令时切换期间会静默地重复执行或跳过。本文详解其故障模式,介绍以 UTC 运行调度的方案、Kubernetes CronJob 的 timeZone 字段,以及云调度器如何处理同样的问题。
夏令时最早作为战时节能措施引入,1916 年德国率先采用。一个多世纪以来它已遍及大部分发达国家,但在 2010 年代末势头开始逆转。2018 年欧盟公民调查发现 84% 的受访者希望结束每年两次的时钟调整,欧洲议会于 2019 年投票废除这一做法。
欧盟指令将选择永久夏令时还是永久冬令时留给成员国决定,各国间的分歧导致实施时间推迟超过了最初 2021 年的目标。尽管如此,政治信号已经明确,类似的废除讨论已扩展到北美、俄罗斯和亚洲。近乎普遍实行夏令时的时代似乎正在终结。
反对夏令时最有力的论据来自医学研究。多项研究表明,春季拨快转换后的周一心脏病发作率上升约 24%。突然扰乱昼夜节律被认为会对心血管系统造成急性压力。秋季的反向转换也会产生较小但仍可测量的相反方向效应。
睡眠医学研究发现,大多数人适应时钟调整需要一到两周,在此期间交通事故、工伤和精神困扰的报告都会增加。研究人员将社会作息与生物钟之间的长期不匹配称为“社会性时差”,而夏令时被普遍认为加剧而非缓解了这种不匹配。
夏令时的初衷是通过将日光延伸到傍晚来节省能源,但现代生活方式带来的净效果很小甚至为负。2008 年印第安纳州的一项研究 (该州近期刚在全州范围内采用夏令时) 发现电力消耗增加了 1% 至 4%。减少照明使用带来的节省被较长傍晚期间增加的空调使用所抵消。
LED 照明的普及 (其耗电量仅为白炽灯泡的一小部分) 进一步削弱了节能论据。夏令时原本应该带来的节省现在已经微不足道。还有报告指出夏令时较长的傍晚鼓励了更多休闲驾车,增加了燃油消耗。最初的理由并没有经受住时间的考验。
当各国决定废除夏令时时,必须选择全年保持哪种时钟。俄罗斯于 2011 年尝试了永久夏令时,但冬季清晨的黑暗引发了足够多的投诉,导致其于 2014 年切换为永久标准时间。这一先例通过证明永久夏令时存在真实缺点,影响了其他地区的讨论。
睡眠科学家倾向于支持永久标准时间,因为它与太阳位置和人体昼夜节律钟更自然地对齐。商业和休闲行业通常偏好永久夏令时以获得更明亮的傍晚。这种分歧使协调变得困难,尤其是在欧洲,相邻国家不希望在变更后彼此相差一个小时。
日本曾在 1948 年至 1951 年战后美军占领期间短暂实行夏令时,但日本公众不喜欢它,政府随后废除了该制度。这个想法周期性地重现:2008 年 G8 北海道峰会时以及 2018 年作为东京奥运会防暑措施时,但两次尝试都未导致立法。
多个因素使夏令时在日本无法推行。炎热潮湿的夏季意味着更长的傍晚并不会转化为户外活动;加班文化意味着 1 小时的时钟偏移实际上并不会缩短办公时间;2018 年估计 IT 系统改造成本高达数万亿日元。结合全球废除趋势,日本在短期内采用夏令时看起来极不可能。
这篇文章对您有帮助吗?
以本地时间配置的 cron 任务在夏令时切换期间会静默地重复执行或跳过。本文详解其故障模式,介绍以 UTC 运行调度的方案、Kubernetes CronJob 的 timeZone 字段,以及云调度器如何处理同样的问题。
了解夏令时的运作方式、哪些国家实行夏令时、转换发生的时间,以及夏令时如何使国际日程安排变得复杂。
夏令时每年制造两个异常时刻:春季拨快时不存在的时间和秋季拨回时重复的时间。本文详细列举了由此在调度、时长计算、重复事件、数据库存储和测试策略中产生的 bug。