在 Debian(以及大多数 Linux 发行版)中,定时器(timer)通常指的是 systemd timer,它比传统的 cron 更灵活,也支持延迟执行。下面按常见需求说明如何设置延迟。
使用 OnActiveSec=、OnBootSec=、OnStartupSec= 等相对时间。
| 指令 | 含义 |
|---|---|
OnActiveSec=10s |
timer 激活后 10 秒执行 |
OnBootSec=5min |
系统启动后 5 分钟执行 |
OnStartupSec=1h |
systemd 启动后 1 小时执行 |
✅ 这是最常用的“延迟执行”方式
使用 OnCalendar= + AccuracySec= 或 RandomizedDelaySec=
| 指令 | 含义 |
|---|---|
OnCalendar=daily |
每天执行 |
RandomizedDelaySec=1h |
随机延迟最多 1 小时 |
AccuracySec=1min |
允许 1 分钟误差 |
# /etc/systemd/system/delay-task.service
[Unit]
Description=Run delayed task
[Service]
Type=oneshot
ExecStart=/usr/local/bin/myscript.sh
# /etc/systemd/system/delay-task.timer
[Unit]
Description=Delay 30 seconds timer
[Timer]
OnActiveSec=30s
Unit=delay-task.service
[Install]
WantedBy=timers.target
sudo systemctl daemon-reload
sudo systemctl enable --now delay-task.timer
查看状态:
systemctl list-timers
✅ 30 秒后执行一次,然后 timer 自动停止(因为是一次性)
[Timer]
OnBootSec=5min
Unit=delay-task.service
[Timer]
OnCalendar=daily
RandomizedDelaySec=1h
Persistent=true
# 每小时的第 5 分钟执行
5 * * * * /usr/local/bin/myscript.sh
或延迟 30 秒:
* * * * * sleep 30 && /usr/local/bin/myscript.sh
⚠️ cron 不支持真正的“相对延迟”,只能靠 sleep
| 场景 | 推荐方式 |
|---|---|
| 延迟 N 秒 / 分钟 | OnActiveSec= |
| 开机后延迟 | OnBootSec= |
| 定时 + 随机延迟 | OnCalendar + RandomizedDelaySec |
| 一次性任务 | systemd timer |
| 简单脚本 | cron |
如果你愿意,可以告诉我:
我可以帮你直接写好 .timer 文件 ✅