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