在 Debian(以及大多数 Linux 发行版)中,“定时器”通常指 systemd 定时器(systemd timer),它比传统的 cron 更现代、更灵活。下面我分几种常见方式来说明。
定时器本身不会执行任务,它用来触发一个 service。
例如:创建一个每天执行的任务 /usr/local/bin/mytask.sh
sudo nano /usr/local/bin/mytask.sh
内容示例:
#!/bin/bash
echo "Hello from systemd timer" >> /tmp/mytask.log
赋予执行权限:
sudo chmod +x /usr/local/bin/mytask.sh
创建 service 文件:
sudo nano /etc/systemd/system/mytask.service
内容:
[Unit]
Description=My Task
[Service]
Type=oneshot
ExecStart=/usr/local/bin/mytask.sh
sudo nano /etc/systemd/system/mytask.timer
示例 1:每天 03:00 执行
[Unit]
Description=Run mytask daily at 3am
[Timer]
OnCalendar=*-*-* 03:00:00
Persistent=true
[Install]
WantedBy=timers.target
示例 2:每 10 分钟执行一次
[Timer]
OnBootSec=5min
OnUnitActiveSec=10min
示例 3:开机后 1 分钟执行一次
[Timer]
OnBootSec=1min
sudo systemctl daemon-reload
sudo systemctl enable --now mytask.timer
systemctl list-timers
systemctl status mytask.timer
查看任务是否执行:
journalctl -u mytask.service
适合简单、单用户任务。
crontab -e
# 每天 3 点执行
0 3 * * * /usr/local/bin/mytask.sh
# 每 10 分钟执行
*/10 * * * * /usr/local/bin/mytask.sh
grep CRON /var/log/syslog
| 特性 | systemd timer | cron |
|---|---|---|
| 精度 | 高 | 中 |
| 日志 | journalctl | syslog |
| 依赖 systemd | 是 | 否 |
| 适合系统服务 | ✅ | ❌ |
| 适合用户任务 | ✅ | ✅ |
OnCalendar=*-*-* *:*:00 # 每分钟
OnCalendar=*-*-* 03:00:00 # 每天 3 点
OnCalendar=Mon *-*-* 09:00:00 # 每周一 9 点
OnCalendar=2026-01-01 00:00:00 # 指定日期
如果你愿意,可以告诉我:
我可以帮你直接写好完整的 .timer + .service 文件。