Linux定时任务:Crontab详解
什么是Crontab
Crontab是Linux系统中用于设置周期性执行任务的工具。通过crontab,可以定时执行脚本、备份、清理等运维任务。
Crontab命令
# 编辑当前用户的crontab
crontab -e
# 查看当前用户的crontab
crontab -l
# 删除当前用户的crontab
crontab -r
# 编辑指定用户的crontab
crontab -e -u username
Crontab语法
* * * * * command
分 时 日 月 周 命令
时间字段
| 字段 |
范围 |
说明 |
| 分钟 |
0-59 |
|
| 小时 |
0-23 |
|
| 日期 |
1-31 |
|
| 月份 |
1-12 |
|
| 星期 |
0-7 (0和7都是周日) |
|
特殊字符
| 字符 |
说明 |
示例 |
| * |
任意值 |
* * * * * 每分钟 |
| , |
列表 |
1,3,5 * * * * 1、3、5分钟 |
| - |
范围 |
1-5 * * * * 1到5分钟 |
| / |
间隔 |
*/5 * * * * 每5分钟 |
常用示例
# 每天凌晨1点执行
0 1 * * * /path/to/script.sh
# 每5分钟执行
*/5 * * * * /path/to/script.sh
# 每周一上午10点
0 10 * * 1 /path/to/script.sh
# 每月1号凌晨2点
0 2 1 * * /path/to/script.sh
# 工作日每天9-18点每小时执行
0 9-18 * * 1-5 /path/to/script.sh
# 每天8点和20点
0 8,20 * * * /path/to/script.sh
系统级Crontab
/etc/crontab
# 系统crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
# 格式:分 时 日 月 周 用户 命令
0 1 * * * root /path/to/script.sh
/etc/cron.d/
# /etc/cron.d/myjob
0 * * * * root /path/to/script.sh
预定义目录
| 目录 |
执行频率 |
| /etc/cron.hourly/ |
每小时 |
| /etc/cron.daily/ |
每天 |
| /etc/cron.weekly/ |
每周 |
| /etc/cron.monthly/ |
每月 |
日志管理
# Crontab日志
tail -f /var/log/cron
# 或
tail -f /var/log/syslog | grep cron
# 命令输出重定向
0 1 * * * /path/to/script.sh >> /var/log/myjob.log 2>&1
注意事项
- 环境变量:cron环境变量与登录环境不同,需要在脚本中设置
#!/bin/bash
export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
export JAVA_HOME=/usr/local/java
- 脚本权限:确保脚本有执行权限
chmod +x /path/to/script.sh
- 绝对路径:尽量使用绝对路径
实践:自动化备份脚本
#!/bin/bash
# /opt/scripts/backup.sh
BACKUP_DIR="/backup"
DATE=$(date +%Y%m%d)
KEEP_DAYS=7
# 创建备份目录
mkdir -p $BACKUP_DIR
# 备份数据库
mysqldump --all-databases | gzip > $BACKUP_DIR/mysql_$DATE.sql.gz
# 备份配置文件
tar -czf $BACKUP_DIR/config_$DATE.tar.gz /etc/nginx /etc/mysql
# 清理旧备份
find $BACKUP_DIR -name "*.gz" -mtime +$KEEP_DAYS -delete
find $BACKUP_DIR -name "*.tar.gz" -mtime +$KEEP_DAYS -delete
echo "备份完成: $DATE"
添加Crontab条目
# 每天凌晨2点执行备份
crontab -e
0 2 * * * /opt/scripts/backup.sh >> /var/log/backup.log 2>&1
总结
Crontab是Linux自动化运维的基础工具。合理使用定时任务,可以实现系统维护、数据备份、日志清理等自动化操作。