VPS关机时错过凌晨备份,开机后还要等到第二天?对按日历运行的systemd定时器,可让它记住上次触发时间,并在重新激活时处理漏掉的计划。

先确认触发类型
用systemctl cat backup.timer查看实际配置,并用systemctl list-timers --all backup.timer看下一次触发。Persistent只对OnCalendar生效,单用OnBootSec或OnUnitActiveSec不能靠它补日历计划。
为日历定时器开启持久记录
在sudo systemctl edit backup.timer中加[Timer]和Persistent=true,分别独立成行;保留既有OnCalendar。示例日历表达式是*-*-* 03:00:00。确认服务名和服务器时区,用systemd-analyze calendar "*-*-* 03:00:00"检查表达式。
理解开机时实际会做什么
如果停用期间至少错过一次触发,重新激活定时器会安排补跑,仍受RandomizedDelaySec影响。错过三次不会因此补执行三次。它记录触发时间,不证明服务成功;失败重试要由服务和备份程序单独处理。
启用前检查备份目的地
先确认磁盘挂载、凭据和空间;必须挂载的目录可在服务单元评估RequiresMountsFor。启用可能触发实际备份,生产环境应安排窗口。执行sudo systemctl daemon-reload后重启已启用的timer;若未启用则按需执行sudo systemctl enable --now backup.timer。
用日志和产物验收
在萤光云或LightNode的独立实例用无副作用的测试服务验证:先触发一次,停timer跨过下一计划点,再启动。查看journalctl -u backup.service -b与下一触发时间。生产验收还要检查备份是否能读取或恢复,不能只看timer显示active。
FAQ
关机一周会逐日补吗? 不会,补跑不会回放每个错过的触发点。
补跑一定马上执行吗? 可能受随机延迟等设置影响。
能替代失败重试吗? 不能,触发和服务成功是两件事。
旧版能照搬吗? 用本机man systemd.timer核对发行版支持。
可以先停生产timer来试吗? 优先用独立测试单元,避免丢掉真实计划。
温馨提示
备份任务应能安全重复执行。验证时使用独立输出目录,避免覆盖现存备份。


