learning
配置定时 Cron 任务
当前阅读:进阶视角
本单元目标
学完本单元后,你将能独立编写 Cron 表达式,并在系统中配置定时任务,使脚本或命令在指定时间(如每天凌晨 2 点)自动执行,无需人工干预。
概念讲解
Cron 是 Unix/Linux 系统下的任务调度器,它通过解析一行包含时间和命令的规则,在预设时刻自动运行指定程序。这行规则即 Cron 表达式,由五个时间字段加一条命令组成:`分 时 日 月 周 命令`。每个字段支持通配符:`*` 表示任意值,`*/n` 表示每隔 n 个单位,`a,b,c` 表示枚举,`a-b` 表示范围。
举例:`0 2 * * * /backup.sh` 表示每天凌晨 2 点整执行备份脚本。若想每周一到周五的每 30 分钟运行一次监控任务,可写为 `*/30 * * * 1-5 /monitor.sh`。注意第五个字段中 0 和 7 均代表周日。
理解 Cron 的关键在于区分系统级与用户级:系统级位于 `/etc/crontab`,可指定运行用户;用户级通过 `crontab -e` 编辑,默认以当前用户身份运行。高级用法还包括环境变量设置、日志重定向(如 `>> /var/log/task.log 2>&1`)以及防止脚本重叠执行的锁机制(如 `flock`)。配置后需确认 crond 服务处于运行状态,否则任务不会触发。
实操演练
- 在终端输入 `crontab -e` 打开当前用户的 Cron 编辑界面(首次会提示选择编辑器)。
- 在文件末尾追加一行 `30 1 * * * /usr/bin/python3 /home/user/daily_report.py >> /home/user/report.log 2>&1`,表示每天 1:30 运行报告脚本并记录日志。
- 保存并退出编辑器(Vi 中输入 `:wq`),系统会提示 `crontab: installing new crontab` 表示安装成功。
- 输入 `crontab -l` 检查已安装的任务列表,确认格式无误。
- 使用 `date -d "tomorrow 01:30"` 或临时将时间改为两分钟后验证任务执行,并检查日志文件内容。
练习任务
- 编写一个 Cron 任务:每周一至周五上午 9 点 15 分执行 `/opt/check_health.sh`,并将标准输出和错误追加到 `/var/log/health.log`,然后通过 `crontab -l` 验证配置结果。
- 创建一个每 5 分钟运行一次、且通过 `flock` 确保同一时间只有一个实例运行的 Cron 任务(提示:命令前加 `flock -n /tmp/worker.lock`),并手动触发一次确认锁生效。