首页/系统/Linux 运维命令速查/timer 精度控制:AccuracySec 与 RandomizedDelaySec
定时任务与计划50 条

timer 精度控制:AccuracySec 与 RandomizedDelaySec

systemd 默认把 timer 对齐到 1 分钟窗口以省电(AccuracySec=1min);要准点用 AccuracySec=1s,要错峰用 RandomizedDelaySec。

Linux 运维命令速查系统更新于 2026-10-13

定时器精度怎么定

systemd 定时器默认不要求严格准点:它把触发时间放在一个误差窗口内合并执行,以减少系统唤醒次数、节省能耗。因此在大规模集群里,同一时刻的定时任务会被自然摊开,这通常是优点而不是缺陷。真正需要准点或需要错峰时,分别用精度参数与随机抖动参数来显式声明意图。

基本信息

适用平台systemd 发行版(定时器单元)
默认行为允许误差窗口,合并相近的唤醒时刻
精度参数控制允许的误差范围,越小越准点也越耗能
抖动参数在触发点之后追加随机延迟,用于错峰

典型使用场景

  • 对账、报表必须在整点附近准点执行,需要收紧误差窗口
  • 几十台机器同时执行维护任务,需要加入随机抖动错峰
  • 排查「任务为什么晚了几十秒才跑」,确认是默认窗口造成
  • 验证定时表达式是否符合预期,避免写错时间点
  • 确认机器停机期间错过的任务是否需要补跑

配置示例

配置示例
# /etc/systemd/system/myjob.timer
[Unit]
Description=Nightly job
[Timer]
OnCalendar=*-*-* 03:00:00
AccuracySec=1s              # 收紧误差窗口,接近准点触发
RandomizedDelaySec=300      # 再随机延迟 0 到 300 秒,用于错峰
Persistent=true             # 停机期间错过的任务在恢复后补跑
[Install]
WantedBy=timers.target

验证与排查

验证与排查
systemd-analyze calendar '*-*-* 03:00:00'      # 校验表达式并看下次触发时间
systemctl list-timers myjob.timer --all        # 看上次与下次触发时刻
systemctl cat myjob.timer                      # 确认生效的参数
journalctl -u myjob.service --since yesterday | tail -20   # 任务实际执行记录
systemctl daemon-reload && systemctl restart myjob.timer   # 改完单元重新加载

参数逐项读法

参数含义调整方向
OnCalendar触发的时间表达式写错不会报错,用分析命令校验
AccuracySec允许的误差窗口要准点就收紧,要省电就放宽
RandomizedDelaySec触发后追加的随机延迟错峰用,时序敏感任务不要加
Persistent是否补跑错过的任务需要不漏跑的维护任务应开启
OnBootSec 等相对时间触发方式开机后一段时间执行,适合自愈脚本
随机抖动是在触发点之后追加延迟,可能让任务跨过下一个调度周期,设置时要确保延迟上限小于任务间隔。

使用建议

  • 先把触发表达式用分析命令验证,再谈精度与抖动
  • 单个服务准点需求用收紧误差窗口,大规模集群错峰用随机抖动
  • 记录任务实际触发时刻,验证是否落在预期范围内
  • 修改单元文件后重新加载并重启定时器,否则改动不生效
  • 需要漏跑补偿时开启持久化,并确认补跑不会造成重复执行
默认的分钟级误差窗口在大规模集群里是有意设计,若全部改成秒级精度,会造成同一时刻的系统唤醒风暴。

易错点

  • 默认误差窗口导致任务比预期晚一些启动,误判成任务没执行,先核对实际触发时间
  • 把所有定时器都改成秒级精度,在集群规模上会形成同步唤醒风暴
  • 随机延迟设置过大导致任务跨越下一个调度周期,出现同一任务并发执行
  • 触发表达式写错不会报错,只是永不触发或触发时间不符,必须用分析命令验证

数据来源与参考

  • man 5 systemd.timer(AccuracySec/RandomizedDelaySec)

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌