Hacker News 中文摘要

RSS订阅

避免凌晨2点和3点的定时任务(2013) -- Avoid 2:00 and 3:00 am cron jobs (2013)

文章摘要

文章建议避免在凌晨2点和3点设置定时任务(cron jobs),因为这是夏令时切换的时间点,可能导致任务重复执行或跳过,引发系统问题。

文章总结

避免在凌晨2点和3点设置定时任务!

文章主要提醒开发者不要在服务器时间的周日凌晨2点或3点设置cron定时任务。原因在于:

  1. 夏令时问题:每年夏令时开始和结束时,这两个时间点会出现时间跳变(时钟调快或调慢1小时),可能导致定时任务异常执行。作者以Linux系统中的vixie-cron为例,曾出现任务在3:00-3:01之间重复执行约60次的情况。

  2. 潜在风险:虽然文中案例未造成严重损害,但重复执行可能导致资源冲突和系统混乱。

解决方案建议: - 将服务器时区设置为UTC(协调世界时),完全避免夏令时影响 - 调整任务执行时间(如改为2:59或3:01) - 呼吁全球政府取消夏令时制度(作者调侃性建议)

文章评论区补充了技术细节: - ISC Cron声称能处理3小时以内的时间变化,但实际效果不佳 - 多位管理员分享了他们的应对经验

文章最后建议,在更好的任务调度工具普及之前,最简单的预防措施就是避开这两个高危时间点设置任务。

(注:原文中的网站导航菜单、标签云、公司服务介绍等与主题无关的内容已省略)

评论总结

以下是评论内容的总结:

  1. 使用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)
  2. 避免在整点或午夜运行任务

    • 建议避免在整点或午夜(如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)
  3. 特定时区和DST的复杂性

    • 提到某些时区(如古巴、埃及、黎巴嫩)的DST变更发生在午夜,可能引发问题。
    • 引用:
      • "Apparently there are some timezones (Cuba, Egypt, Lebanon) where DST change happens at midnight." (cuu508)
  4. 工具和替代方案

    • 部分评论者提到systemd-timersanacronflock等工具可以解决任务重叠问题。
    • 引用:
      • "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)
  5. 实际案例和解决方案

    • 分享了因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)
  6. 对DST的批评

    • 部分评论者认为DST机制本身存在问题,UTC是更简单的解决方案。
    • 引用:
      • "DST is such a dumb mechanism anyway, just use UTC" (tonyhart7)

总结:评论普遍认为UTC是避免DST问题的首选方案,同时建议优化任务调度时间并使用工具处理任务重叠问题。