Debian 系统中定时器的主流配置方式:systemd 定时器
Debian(尤其是10及以上版本)推荐使用systemd定时器替代传统cron,其配置文件分为服务单元文件(定义任务内容)和定时器单元文件(定义触发规则),均存放在/etc/systemd/system/目录下(系统级)。
systemd 定时器由两个关联文件组成:
服务单元文件(.service):定义要执行的任务(如脚本、命令),格式如下:
[Unit]
Description=任务描述(如"Daily Backup Task")
[Service]
Type=oneshot # 一次性任务(如备份);若需循环任务(如每分钟检查),可改为"simple"
ExecStart=/绝对路径/脚本或命令 # 必须使用绝对路径(如/usr/local/bin/backup.sh)
示例:创建每日凌晨2点执行的备份服务,文件路径为/etc/systemd/system/daily-backup.service:
[Unit]
Description=Daily Backup Task
[Service]
Type=oneshot
ExecStart=/home/user/scripts/backup.sh
注:脚本需提前赋予执行权限(
chmod +x /home/user/scripts/backup.sh)。
定时器单元文件(.timer):定义任务的触发时间规则,格式如下:
[Unit]
Description=定时器描述(如"Run Daily Backup at 2 AM")
[Timer]
OnCalendar=*-*-* 02:00:00 # 触发时间(核心字段,详见下文)
Persistent=true # 若系统在触发时间关机,开机后补执行
[Install]
WantedBy=timers.target # 启用定时器的目标(必须)
OnCalendar字段:支持多种时间格式,常见示例如下:
| 格式 | 含义 | 示例 |
|---|---|---|
*-*-* HH:MM:SS |
每天固定时间执行 | *-*-* 02:00:00(每天凌晨2点) |
Mon*-*-* HH:MM:SS |
每周一固定时间执行 | Mon*-*-* 09:00:00(每周一9点) |
*-*-01 00:00:00 |
每月1号执行 | *-*-01 03:00:00(每月1号3点) |
*-*-* 17:00:00/1h |
每天17:00-19:00每小时执行 | *-*-* 17:00:00/1h(17-19点每小时) |
@daily |
每天00:00执行 | @daily(等价于*-*-* 00:00:00) |
@weekly |
每周日00:00执行 | @weekly(等价于*-*-* 00:00:00,星期日为0) |
@hourly |
每小时执行 | @hourly(等价于*-*-* *:00:00) |
示例:创建每小时触发一次的定时器,文件路径为/etc/systemd/system/daily-backup.timer:
[Unit]
Description=Run Daily Backup at 2 AM
[Timer]
OnCalendar=*-*-* 02:00:00
Persistent=true
[Install]
WantedBy=timers.target
创建服务单元文件:
使用文本编辑器(如nano)创建.service文件,填入任务内容并保存:
sudo nano /etc/systemd/system/daily-backup.service
输入上述服务单元文件内容,保存退出。
创建定时器单元文件:
使用文本编辑器创建.timer文件,填入触发规则并保存:
sudo nano /etc/systemd/system/daily-backup.timer
输入上述定时器单元文件内容,保存退出。
启用并启动定时器:
执行以下命令使定时器生效:
sudo systemctl enable --now daily-backup.timer
enable:设置定时器开机自启;--now:立即启动定时器(无需等待下次开机)。查看所有定时器状态:
sudo systemctl list-timers --all
输出包含定时器名称、下次触发时间、状态等信息(如daily-backup.timer的NEXT字段显示下次执行时间)。
查看特定定时器详情:
sudo systemctl status daily-backup.timer
显示定时器的配置、状态(如active表示激活)、最近触发记录。
停止/禁用定时器:
sudo systemctl stop daily-backup.timer # 停止当前定时器
sudo systemctl disable daily-backup.timer # 禁用开机自启
重新加载配置:
修改.timer或.service文件后,需重新加载systemd配置:
sudo systemctl daemon-reload
查看定时器日志:
使用journalctl查看定时器及任务的执行日志:
journalctl -u daily-backup.timer # 查看定时器日志
journalctl -u daily-backup.service # 查看任务日志
若仍需使用传统cron,配置文件路径如下:
用户级定时任务:编辑当前用户的crontab(crontab -e),格式为:
* * * * * /绝对路径/命令或脚本
字段含义:分钟 小时 日期 月份 星期几 命令(如0 3 * * * /home/user/backup.sh表示每天凌晨3点执行)。
系统级定时任务:编辑/etc/crontab或/etc/cron.d/下的文件,需指定用户(如root):
* * * * * root /绝对路径/命令或脚本
注:
cron配置需注意绝对路径(避免相对路径问题),日志可通过/var/log/syslog查看。