在 Debian(以及大多数 Linux 发行版)里,定时器(Timer)通常是指 systemd Timer,用来替代传统的 cron。下面我按从简单到进阶给你讲清楚。
systemd Timer 用来定时触发 systemd 服务,比 cron 更强:
journalctl 管理两个文件一组:
| 文件 | 作用 |
|---|---|
.service |
定义要执行的任务 |
.timer |
定义什么时候执行 |
sudo mkdir -p /usr/local/bin
sudo nano /usr/local/bin/mytask.sh
内容:
#!/bin/bash
echo "$(date) run" >> /tmp/mytask.log
sudo chmod +x /usr/local/bin/mytask.sh
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
[Unit]
Description=Run mytask every minute
[Timer]
OnBootSec=1min
OnUnitActiveSec=1min
[Install]
WantedBy=timers.target
sudo systemctl daemon-reload
sudo systemctl enable --now mytask.timer
systemctl list-timers
systemctl status mytask.timer
journalctl -u mytask.service
OnCalendar=*-*-* *:*:00
示例:
| 需求 | 配置 |
|---|---|
| 每天 3 点 | OnCalendar=03:00 |
| 每周一 8 点 | OnCalendar=Mon *-*-* 08:00 |
| 每月 1 号 | OnCalendar=*-*-01 00:00 |
| 参数 | 含义 |
|---|---|
OnBootSec |
开机后 |
OnActiveSec |
启动后 |
OnUnitActiveSec |
上次执行后 |
[Timer]
OnCalendar=2026-02-01 03:00
Persistent=true
| 对比 | cron | systemd timer |
|---|---|---|
| 精度 | 分钟 | 秒 |
| 日志 | 邮件 | journal |
| 管理 | crontab | systemctl |
| 依赖服务 | 否 | 是 |
systemctl daemon-reload
systemctl restart mytask.timer
systemctl list-timers --all
✅ Debian 定时器推荐用 systemd Timer
✅ 至少需要 .service + .timer
✅ 用 systemctl enable --now xxx.timer 启用
如果你愿意,可以告诉我:
我可以直接帮你写完整配置 ✅