首页/系统/Linux 运维命令速查/timer 补跑:Persistent=true
定时任务与计划50 条

timer 补跑:Persistent=true

Persistent=true 让 OnCalendar 定时器记录最后触发点:关机期间错过的触发在开机后立即补一次,是 cron 不具备的能力。

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

Persistent 是什么

定时器的持久化选项让基于日历触发的任务记录最后一次触发时间:机器关机期间错过的触发点会在开机后立即补跑一次。这是定时器相比传统任务表的额外能力,也改变了错过就不补的传统行为。

基本信息

用途补跑关机期间错过的调度
适用基于日历时刻的定时器
记录位置系统定时器状态目录下的时间戳文件
注意只补最近一次,不逐日补齐

典型使用场景

  • 每日备份:夜间维护窗口错过备份时,开机后自动补上
  • 周期性巡检:巡检任务不因一次停机而整周缺失
  • 迁移到定时器:把原本依赖额外守护进程的补跑能力内建化
  • 验证补跑:检查时间戳与触发记录,确认机制真的生效
  • 逐日缺口:需要逐日补齐时在脚本内部按日期检查缺口

定时器定义

定时器定义
# /etc/systemd/system/backup.timer
[Unit]
Description=daily backup

[Timer]
OnCalendar=*-*-* 02:30:00
Persistent=true
RandomizedDelaySec=10min

[Install]
WantedBy=timers.target

验证补跑

验证补跑
ls -l /var/lib/systemd/timers/                 # 查看记录的最后触发时间
systemctl list-timers backup.timer --no-pager
journalctl -u backup.service --since '-1 hour' --no-pager

触发条件对照

选项作用适用条件
按日历时刻到点触发可与补跑选项配合
持久化选项记录并补跑错过的触发仅对日历型定时器有意义
随机延迟触发后随机等待避免多任务同时启动
开机后相对时间开机后延迟触发不存在错过补跑的问题
基于上次活动时间按间隔触发同样不适用补跑语义
补跑只补一次最近错过的时点,关机多天的日备任务不会逐日补齐,需要逐日数据时在脚本里按日期检查缺口。
补跑选项对基于相对时间的定时器没有意义,两类触发条件不要混用。
手动触发任务会刷新记录的时间戳,误判补跑失败前先看日志里有没有执行记录。

易错点

  • 补跑只覆盖最近一次错过的触发点,长期停机造成的逐日缺口需要脚本自行检查
  • 把补跑选项写在相对时间型定时器上不起作用,配置看似生效实际没有效果
  • 手动触发会刷新时间戳,误以为补跑没执行时先查目标任务的日志
  • 多个定时器在同一时刻补跑会形成资源尖峰,配合随机延迟错峰更稳

数据来源与参考

  • man 5 systemd.timer(Persistent)
  • systemd 官方文档:timers

相关工具

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