Debian 定时任务的触发条件主要通过两种机制实现:传统 cron
服务的 Cron 表达式与现代 systemd
系统的定时器单元配置。
Cron 是 Debian 系统经典的定时任务工具,通过Cron 表达式定义任务触发的时间规则。Cron 表达式由5个(或6个,含秒)字段组成,每个字段用空格分隔,支持特殊字符组合实现灵活的时间控制。
核心字段及含义:
字段顺序 | 含义 | 允许值 | 特殊字符说明 |
---|---|---|---|
1 | 分钟 | 0-59 | * (每分钟)、, (枚举值,如1,15,30)、- (范围,如10-20)、/ (步长,如*/5) |
2 | 小时 | 0-23 | 同上 |
3 | 日期(月内) | 1-31 | 同上;L (当月最后一天,如0 0 L * * 表示每月最后一天午夜执行) |
4 | 月份 | 1-12 或 JAN-DEC | 同上 |
5 | 星期几 | 0-7(0/7=周日)或 SUN-SAT | 同上;# (第几个周几,如0 0 1#2 * * 表示每月第二个周一凌晨执行) |
6(可选) | 秒 | 0-59 | 仅在6字段Cron中有效 |
常见示例:
0 0 * * *
:每天午夜0点执行;*/15 * * * *
:每15分钟执行一次;0 9 ? * MON-FRI
:每个工作日上午9点执行(?
表示不关心日期或星期的冲突)。Debian 系统默认使用 systemd
管理定时任务,通过定时器单元(.timer 文件)定义触发规则,关联服务单元(.service 文件)执行具体任务。定时器支持时间驱动(如日历时间、相对间隔)和事件驱动(如系统启动、服务状态变化)两种模式。
1. 时间驱动触发条件
通过 OnCalendar
参数设置时间规则,支持自然语言(如Mon,Fri
)和精确时间(如*-*-* 02:00:00
,表示每天凌晨2点)。常见选项包括:
OnBootSec
:系统启动后经过的时间(如OnBootSec=5min
表示启动后5分钟触发);OnUnitActiveSec
:上次任务执行后经过的时间(如OnUnitActiveSec=1h
表示每小时触发一次);OnCalendar
:日历时间(如OnCalendar=*-*-* 09:00:00
表示每天9点执行)。2. 事件驱动触发条件
通过 OnEvent
参数绑定系统事件(如systemd-logind.service
的session-start
事件),当事件发生时触发任务。此类配置需结合 systemd-analyze
工具分析事件名称。
3. 持久性与立即触发
Persistent=true
:若定时器在到期时系统处于关闭状态,启动后会立即执行一次(补偿错过的执行);AccuracySec
:调整触发精度(如AccuracySec=1min
表示允许1分钟内延迟,减少系统负载)。配置示例:
[Unit]
Description=My Scheduled Task
[Service]
ExecStart=/path/to/your/script.sh
[Unit]
Description=Run My Task Daily
[Timer]
OnCalendar=*-*-* 02:00:00
Persistent=true
[Install]
WantedBy=timers.target
管理命令:
sudo systemctl enable --now mytask.timer
;sudo systemctl list-timers --all
(显示所有定时器的下一次触发时间及状态);sudo journalctl -u mytask.service
(过滤服务单元的日志)。