systemd-analyze calendar '*-*-* 03:00:00'
systemctl list-timers --all | grep backup
systemctl enable --now backup.timer
journalctl -u backup.service -n 50

写了个每天三点执行的 timer 到点什么都没发生 既没有日志也没有报错 systemctl list-timers 里 NEXT 那一列一直显示 n/a 手动 start 却能跑完。先别急着动参数,把报错原文和时间点记下来,顺序反了容易白折腾。

原因不复杂,OnCalendar 的表达式少了日期段 解析不出来就静默不排期 加上 timer 只 start 过没有 enable 机器重启之后单元彻底不再被拉起 到点自然什么都不发生。

「systemd timer 未触发」改完先别急着全量,挑一台机器放半天,真有问题这段时间就能看出来。动手前把原文件复制一份带时间戳,出问题立刻换回去,比现场分析快得多。

一次只改一处,改完立刻验证,几个改动叠在一起,出问题就说不清是谁导致的。

处理上按这个顺序:用 systemd-analyze calendar 验证表达式格式能不能被正确解析 再上生产;确认 timer 处于 enable 状态 保证开机后自启 而不是只临时 start 过;检查 service 单元有没有被 timer 的 Unit 指向正确引用 路径别写错。

改完只确认一件事:list-timers 里 NEXT 显示下一个本地时间点 到点后 service 日志里有正常执行记录和耗时。

作者 9823189