晚风笔记

记一些折腾、服务和网络上的琐事

用 systemd timer 替掉 cron 之后

2026-07-03 · 运维

倒不是说 cron 不好。只是有一次备份脚本失败了两周才被发现——因为 cron 的报错只发到本地邮箱,而我从来没配过 MTA。

换成 systemd timer 之后,起码不用再猜它到底跑没跑。

一个最小的例子

先写 service:

# /etc/systemd/system/backup.service
[Unit]
Description=Nightly backup

[Service]
Type=oneshot
ExecStart=/usr/local/bin/backup.sh

再写 timer:

# /etc/systemd/system/backup.timer
[Unit]
Description=Run backup every night

[Timer]
OnCalendar=*-*-* 03:30:00
Persistent=true

[Install]
WantedBy=timers.target

Persistent=true 是我最喜欢的一项:如果那会儿机器在重启或者关机,开机后会补跑一次。cron 的 anacron 也能做,但配置起来麻烦多了。

日志直接看

systemctl list-timers
journalctl -u backup.service --since yesterday

失败的话 systemctl status backup.service 会告诉你退出码,标准错误也在 journal 里。比翻 /var/log/cron 舒服。

一点不方便

要临时改时间得 daemon-reload,不像 crontab 那样改完就生效。脚本多了以后 unit 文件也会变多,得注意命名。

现在这台机器上跑着四个 timer:备份、证书续期检查、日志清理、还有一个小监控。暂时没想换回去。

← 返回首页