在 Debian(以及大多数现代 Linux 发行版)中,说到“定时器”,通常有两种常见含义:
下面分别解释它们的原理。
systemd 定时器依赖两个单元文件:
.timer 文件:定义“什么时候触发”.service 文件:定义“触发后执行什么”例如:
# /etc/systemd/system/backup.timer
[Unit]
Description=Daily Backup
[Timer]
OnCalendar=*-*-* 02:00:00
Persistent=true
[Install]
WantedBy=timers.target
# /etc/systemd/system/backup.service
[Unit]
Description=Backup Service
[Service]
Type=oneshot
ExecStart=/usr/local/bin/backup.sh
.timer 被 systemd 加载后:
.servicesystemctl list-timers
✅ 精确(可到秒)
✅ 支持开机后补执行(Persistent)
✅ 与系统服务统一管理
✅ 日志可用 journalctl 查看
cron 或 croniecrontab -e
示例:
0 2 * * * /usr/local/bin/backup.sh
含义:
分 时 日 月 周
/etc/crontab/etc/cron.d/*✅ 使用简单
❌ 精度最低为 1 分钟
❌ 关机期间任务不会补执行
❌ 日志分散(通常是 /var/log/syslog)
| 对比项 | systemd timer | cron |
|---|---|---|
| 精度 | 秒级 | 分钟级 |
| 补执行 | 支持 | 不支持 |
| 日志 | journalctl | syslog |
| 管理 | systemctl | crontab |
| 推荐度 | ⭐⭐⭐⭐⭐ | ⭐⭐⭐ |
Debian 的“定时器”本质是:由一个一直运行的进程(systemd 或 cron)按照时间规则触发指定程序执行。
如果你愿意,我也可以:
OnCalendar 时间格式