1. Cron格式说明
crontab使用五个时间字段来定义任务的执行时间:
* * * * * command# 分钟 小时 日 月 星期 命令
时间字段取值规则:
2.时间字段取值范围
3.特殊时间字符串
4.常用时间表达式
| 说明 | 表达式 |
|---|
| * * * * * |
| */5 * * * * |
| */15 * * * * |
| 0 * * * * |
| 30 2 * * * |
| 0 9 * * 1-5 |
| 0 3 * * 0 |
| 0 0 1 * * |
| 0 */6 * * * |
| 0 6 15 * * |
5.crontab管理命令
| 命令 | 说明 |
|---|
crontab -e | |
crontab -l | |
crontab -r | |
crontab -u username -l | |
crontab -u username -e | |
crontab file.txt | |
6.实用配置示例
(1)定期执行脚本
*/5 * * * * /home/user/script.sh # 每5分钟执行脚本
0 2 * * * /usr/local/bin/backup.sh # 每天凌晨2点执行备份
(2)带日志输出的任务
0 2 * * * /home/user/backup.sh >> /var/log/backup.log 2>&1 # 将输出和错误都记录到日志
(3)防止任务重叠执行
0 1 * * * /usr/bin/flock -n /tmp/job.lock /home/user/job.sh # 使用文件锁防止并发执行
(4)延迟启动任务
@reboot /usr/bin/sleep 30 && /home/user/startup.sh # 启动30秒后执行
7.环境变量配置
在crontab文件开头设置:
SHELL=/bin/bash # 指定使用的shell
PATH=/usr/local/bin:/usr/bin:/bin # 设置命令搜索路径
MAILTO=admin@example.com # 任务输出发送到指定邮箱
MAILTO=""# 禁用邮件通知
CRON_TZ=Asia/Shanghai # 设置时区
8.故障排查清单
当定时任务未执行时,按以下顺序检查:
(1)检查cron服务状态
systemctl status cron # Debian/Ubuntu系统
systemctl status crond # RHEL/CentOS系统
(2)查看cron日志
grep CRON /var/log/syslog # Debian/Ubuntu系统
grep CROND /var/log/cron # RHEL/CentOS系统
journalctl -u cron --since "today"# 查看今天的启动任务
(3)检查脚本权限
ls -l /path/to/script.sh
chmod +x /path/to/script.sh # 如需添加执行权限
(4)手动测试脚本
/path/to/script.sh # 直接运行测试
(5)检查@reboot任务执行情况
journalctl -u cron --since "today" | grep reboot
温馨提示: 使用绝对路径编写脚本和命令是最可靠的做法,可以避免因环境变量不同导致的执行失败。