Debian 系统定时任务配置:systemd 定时器 vs cron
Debian 系统支持两种主流的定时任务配置方式:systemd 定时器(现代、集成化)和cron(传统、广泛使用)。以下分别介绍两种方式的详细配置方法:
systemd 定时器是 systemd 系统和服务管理器的组件,提供更灵活的时间调度和更好的日志集成,适用于需要精准控制或依赖 systemd 的场景。
服务单元文件描述定时任务要执行的具体操作。以创建每日凌晨2点执行的“每日任务”为例:
sudo nano /etc/systemd/system/daily-task.service
在文件中添加以下内容(替换为实际脚本路径):
[Unit]
Description=Daily Scheduled Task
[Service]
ExecStart=/path/to/your/script.sh # 替换为实际脚本路径
保存并退出编辑器。若脚本需要执行权限,需运行:
chmod +x /path/to/your/script.sh
定时器单元文件关联服务单元,定义任务的执行时间。继续创建:
sudo nano /etc/systemd/system/daily-task.timer
添加以下内容(关键参数说明见注释):
[Unit]
Description=Run Daily Task at 2 AM
[Timer]
OnCalendar=*-*-* 02:00:00 # 每天凌晨2点触发(格式:年-月-日 时:分:秒)
Persistent=true # 若系统在触发时间关机,开机后会补执行
[Install]
WantedBy=timers.target # 启用后随系统启动
配置完成后,需重新加载 systemd 以识别新单元,然后启用并启动定时器:
sudo systemctl daemon-reload # 重新加载 systemd 配置
sudo systemctl enable --now daily-task.timer # 启用并立即启动定时器
sudo systemctl list-timers --all
sudo systemctl status daily-task.timer
sudo systemctl stop daily-task.timer
sudo systemctl disable daily-task.timer
sudo rm /etc/systemd/system/daily-task.{service,timer}
若需要更高精度的调度(如避免多个定时器同时启动),可添加以下参数:
[Timer]
OnCalendar=*-*-* *:*:00/1 # 每分钟的第0秒触发(每分钟执行一次)
RandomizedDelaySec=1m # 触发时间随机延迟1分钟内(避免峰值)
AccuracySec=1s # 定时器精度设为1秒
Persistent=true
Unit=daily-task.service
cron 是 Debian 系统默认的定时任务工具,适用于简单、周期性的任务(如每日备份、日志清理),配置步骤更简洁。
大多数 Debian 系统已预装 cron,若未安装可通过以下命令安装:
sudo apt update && sudo apt install cron
启动并设置开机自启:
sudo systemctl start cron
sudo systemctl enable cron
crontab -e
sudo nano /etc/crontab
cron 任务格式为:分钟 小时 日期 月份 星期几 命令(* 表示任意值)。例如:
/home/user/backup.sh:0 2 * * * /home/user/backup.sh
*/5 * * * * root /usr/bin/find /var/log -name "*.log" -mtime +7 -delete
注:系统级 crontab 需指定用户(如
root),用户级 crontab 无需指定。
Ctrl+O → Enter → Ctrl+X)。crontab -l
crontab -r
grep CRON /var/log/syslog
或使用 journalctl:journalctl -u cron