文章摘要
文章建议避免在凌晨2点和3点设置定时任务(cron jobs),因为这是夏令时切换的时间点,可能导致任务重复执行或跳过,引发系统问题。
文章总结
避免在凌晨2点和3点设置定时任务!
文章主要提醒开发者不要在服务器时间的周日凌晨2点或3点设置cron定时任务。原因在于:
夏令时问题:每年夏令时开始和结束时,这两个时间点会出现时间跳变(时钟调快或调慢1小时),可能导致定时任务异常执行。作者以Linux系统中的vixie-cron为例,曾出现任务在3:00-3:01之间重复执行约60次的情况。
潜在风险:虽然文中案例未造成严重损害,但重复执行可能导致资源冲突和系统混乱。
解决方案建议: - 将服务器时区设置为UTC(协调世界时),完全避免夏令时影响 - 调整任务执行时间(如改为2:59或3:01) - 呼吁全球政府取消夏令时制度(作者调侃性建议)
文章评论区补充了技术细节: - ISC Cron声称能处理3小时以内的时间变化,但实际效果不佳 - 多位管理员分享了他们的应对经验
文章最后建议,在更好的任务调度工具普及之前,最简单的预防措施就是避开这两个高危时间点设置任务。
(注:原文中的网站导航菜单、标签云、公司服务介绍等与主题无关的内容已省略)
评论总结
以下是评论内容的总结:
使用UTC时间避免问题
- 多位评论者建议使用UTC时间,以避免夏令时(DST)带来的混乱。
- 引用:
- "Just use UTC folks unless you have a really good idea why you shouldn't." (noir_lord)
- "this is the way" (ttz)
避免在整点或午夜运行任务
- 建议避免在整点或午夜(如00:00)运行任务,以减少资源竞争和日志混淆。
- 引用:
- "Also, never set jobs to run at midnight (00:00) as nobody will be able to tell what day it is." (gadders)
- "I try to avoid crons at the top of the hour... there's more resource contention." (ldoughty)
特定时区和DST的复杂性
- 提到某些时区(如古巴、埃及、黎巴嫩)的DST变更发生在午夜,可能引发问题。
- 引用:
- "Apparently there are some timezones (Cuba, Egypt, Lebanon) where DST change happens at midnight." (cuu508)
工具和替代方案
- 部分评论者提到
systemd-timers、anacron或flock等工具可以解决任务重叠问题。 - 引用:
- "anacron is worth a mention here for sometimes-on computers like desktops, laptops..." (meonkeys)
- "Seems to me the real problem here is... having multiple instances of a cron job that overlap." (matja)
- 部分评论者提到
实际案例和解决方案
- 分享了因DST导致任务重复或跳过的实际案例,并提供了解决方案(如调整任务时间)。
- 引用:
- "I solved this by adding a second entry to the crontab that runs at 3:45AM only on the 2nd Sunday in March." (litoE)
对DST的批评
- 部分评论者认为DST机制本身存在问题,UTC是更简单的解决方案。
- 引用:
- "DST is such a dumb mechanism anyway, just use UTC" (tonyhart7)
总结:评论普遍认为UTC是避免DST问题的首选方案,同时建议优化任务调度时间并使用工具处理任务重叠问题。