Debian 定时器启动方式
一 systemd 定时器启动方式
[Unit]
Description=Your Task
[Service]
Type=oneshot
ExecStart=/usr/bin/your-script.sh
[Unit]
Description=Timer for your task
[Timer]
OnCalendar=*-*-* 02:00:00
Persistent=true
[Install]
WantedBy=timers.target
sudo systemctl daemon-reload
sudo systemctl enable --now yourtask.timer
sudo systemctl status yourtask.timer
sudo systemctl list-timers --all
sudo systemctl stop yourtask.timer
sudo systemctl disable yourtask.timer
要点:定时器由 systemd-timers 驱动,调度规则写在 OnCalendar 中;Persistent=true 可在系统错过触发时补执行;修改单元后需执行 daemon-reload。
二 Cron 的启动与管理
sudo apt-get install -y cron
sudo systemctl start cron
sudo systemctl enable cron
0 6 * * * /path/to/backup.sh
sudo systemctl status cron
sudo systemctl restart cron
tail -f /var/log/syslog | grep CRON
要点:Cron 是最常用的定时任务机制,支持分钟级调度;系统级任务使用 /etc/crontab 或 /etc/cron.d/,用户级任务使用 crontab -e。
三 如何选择与对比
| 维度 | systemd 定时器 | Cron |
|---|---|---|
| 启动方式 | 创建 .timer 单元并执行 systemctl enable --now your.timer | 安装并启动 cron 服务,使用 crontab -e 或编辑 /etc/crontab |
| 配置位置 | /etc/systemd/system/*.timer 与 .service | /var/spool/cron/crontabs/用户名、/etc/crontab、/etc/cron.d/ |
| 时间语法 | OnCalendar=…(日历时间表达式) | 分 时 日 月 周 五字段 |
| 错过执行 | Persistent=true 可补执行 | 默认不补执行 |
| 日志与排查 | systemctl status 与 journalctl -u your.timer | /var/log/syslog 中 grep CRON |
| 适用场景 | 与 systemd 服务深度集成、需精确日历时间 | 简单周期任务、系统维护脚本 |
| 要点:两者可并存;若需与 systemd 服务生命周期、日志与依赖管理联动,优先使用 systemd 定时器;简单脚本与系统级例行任务可用 Cron。 |