简短结论:在 Ubuntu 上,systemd 定时器(systemd timers)在大多数场景下可以替代 cron,但并不是 100% 完全等价,有些简单或特殊需求仍更适合 cron。
下面从几个角度说清楚。
Ubuntu 现在默认使用 systemd,它自带 timer 单元,可以代替 cron 做定时任务。
典型用法:
示例:
# /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]
Type=oneshot
ExecStart=/usr/local/bin/backup.sh
启用:
systemctl enable --now backup.timer
✅ 更精确
OnCalendar 比 cron 更强大✅ 任务管理更规范
systemctl statusjournalctl✅ 失败可感知
✅ 支持依赖关系
✅ 适合服务器 / 容器环境
❌ 简单任务更方便
0 2 * * * /backup.sh
比写两个 systemd 文件简单太多。
❌ 多用户 cron 更自然
crontab -e 每个用户独立❌ 老旧脚本 / 传统系统
❌ 极小系统 / 容器
| 功能 | cron | systemd timer |
|---|---|---|
| 简单定时 | ✅ | ⚠️(配置多) |
| 精确到秒 | ❌ | ✅ |
| 日志管理 | ❌ | ✅ |
| 失败重试 | ❌ | ✅ |
| 多用户 | ✅ | ⚠️ |
| 开机执行 | ❌ | ✅ |
| 依赖控制 | ❌ | ✅ |
如果你愿意,我可以:
你现在的定时任务是哪一类?