第172集:Cron 定时任务
核心知识点讲解
1. Cron 定时任务概述
Cron是Linux系统中内置的定时任务调度器,用于按照预定的时间自动执行命令或脚本。它是实现系统自动化运维的基础工具之一,广泛应用于日志轮转、备份、系统维护等场景。
2. Cron 语法结构
Cron表达式由5个时间字段组成,格式为:分 时 日 月 周 命令
| 字段 | 允许值 | 特殊字符 |
|---|---|---|
| 分钟 | 0-59 | , - * / |
| 小时 | 0-23 | , - * / |
| 日期 | 1-31 | , - * / ? |
| 月份 | 1-12 | , - * / |
| 星期 | 0-7 (0和7都表示周日) | , - * / ? |
特殊字符含义:
*:匹配任意值,:分隔多个值-:指定范围/:指定步长?:仅用于日期和星期字段,表示不指定值
3. Cron 配置文件
3.1 系统级配置文件
/etc/crontab:系统级定时任务配置文件/etc/cron.d/:存放系统级定时任务的目录/etc/cron.hourly/:每小时执行的脚本目录/etc/cron.daily/:每天执行的脚本目录/etc/cron.weekly/:每周执行的脚本目录/etc/cron.monthly/:每月执行的脚本目录
3.2 用户级配置文件
crontab -e:编辑当前用户的定时任务crontab -l:查看当前用户的定时任务crontab -r:删除当前用户的定时任务crontab -u username -e:编辑指定用户的定时任务(需要root权限)
4. Cron 任务管理
4.1 添加定时任务
使用crontab -e命令编辑定时任务,格式如下:
# 每分钟执行一次命令
* * * * * command
# 每天凌晨1点执行命令
0 1 * * * command
# 每周一早上8点执行命令
0 8 * * 1 command
# 每月1日和15日中午12点执行命令
0 12 1,15 * * command
# 每小时的第15分钟执行命令
15 * * * * command
# 每两个小时执行一次命令
0 */2 * * * command4.2 查看定时任务
# 查看当前用户的定时任务
crontab -l
# 查看指定用户的定时任务
crontab -u username -l4.3 删除定时任务
# 删除当前用户的所有定时任务
crontab -r
# 删除指定用户的所有定时任务
crontab -u username -r4.4 重启 Cron 服务
# 重启 cron 服务(Systemd)
systemctl restart cron
# 重启 crond 服务(SysVinit)
service crond restart5. Cron 日志管理
Cron的执行日志通常存放在以下位置:
/var/log/cron.log:Ubuntu/Debian系统/var/log/cron:CentOS/RHEL系统
可以通过查看日志了解定时任务的执行情况:
# 查看 cron 日志
tail -f /var/log/cron.log
# 搜索特定任务的执行记录
grep "command" /var/log/cron.log实用案例分析
案例1:系统日志轮转
场景描述:需要每天凌晨自动执行日志轮转,防止日志文件过大。
解决方案:
# 编辑定时任务
crontab -e
# 添加日志轮转任务
0 0 * * * /usr/sbin/logrotate /etc/logrotate.conf实施效果:
- 系统日志每天自动轮转,保持日志文件大小合理
- 避免了日志文件过大导致的磁盘空间不足问题
案例2:数据库备份
场景描述:需要每天凌晨2点自动备份MySQL数据库。
解决方案:
- 创建备份脚本
backup_mysql.sh:
#!/bin/bash
# 备份目录
BACKUP_DIR="/backup/mysql"
# 创建备份目录
mkdir -p $BACKUP_DIR
# 备份时间戳
TIMESTAMP=$(date +"%Y%m%d_%H%M%S")
# 执行备份
mysqldump -u root -p密码 --all-databases > "$BACKUP_DIR/mysql_backup_$TIMESTAMP.sql"
# 压缩备份文件
gzip "$BACKUP_DIR/mysql_backup_$TIMESTAMP.sql"
# 删除7天前的备份文件
find $BACKUP_DIR -name "*.gz" -mtime +7 -delete- 给脚本添加执行权限:
chmod +x backup_mysql.sh- 添加定时任务:
crontab -e
# 添加数据库备份任务
0 2 * * * /path/to/backup_mysql.sh实施效果:
- 数据库每天自动备份,确保数据安全
- 自动删除旧备份文件,避免磁盘空间浪费
案例3:网站访问统计
场景描述:需要每小时统计网站访问量并生成报告。
解决方案:
- 创建统计脚本
website_stats.sh:
#!/bin/bash
# 日志文件路径
LOG_FILE="/var/log/nginx/access.log"
# 统计结果目录
STATS_DIR="/var/www/stats"
# 创建统计结果目录
mkdir -p $STATS_DIR
# 时间戳
TIMESTAMP=$(date +"%Y%m%d_%H00")
# 统计访问量
VISITS=$(grep "$(date +"%d/%b/%Y:%H")" $LOG_FILE | wc -l)
# 统计独立IP
UNIQUE_IPS=$(grep "$(date +"%d/%b/%Y:%H")" $LOG_FILE | awk '{print $1}' | sort | uniq | wc -l)
# 生成报告
echo "时间: $(date +"%Y-%m-%d %H:00")" > "$STATS_DIR/stats_$TIMESTAMP.txt"
echo "访问量: $VISITS" >> "$STATS_DIR/stats_$TIMESTAMP.txt"
echo "独立IP: $UNIQUE_IPS" >> "$STATS_DIR/stats_$TIMESTAMP.txt"- 给脚本添加执行权限:
chmod +x website_stats.sh- 添加定时任务:
crontab -e
# 添加网站统计任务
0 * * * * /path/to/website_stats.sh实施效果:
- 每小时自动生成网站访问统计报告
- 为网站运营提供数据支持
课后练习
- 创建一个定时任务,每天早上6点自动更新系统时间
- 配置一个定时任务,每周日晚上10点清理系统临时文件
- 编写一个脚本,监控系统磁盘使用率,当使用率超过80%时发送告警邮件,并设置为每小时执行一次
- 配置一个定时任务,每月1日自动生成系统状态报告,包括CPU、内存、磁盘和网络使用情况
- 学习如何使用
anacron命令,了解它与cron的区别和适用场景
总结
本集详细介绍了Linux系统中Cron定时任务的配置和管理,包括Cron语法结构、配置文件编辑、任务管理和日志查看等核心知识点,并通过系统日志轮转、数据库备份和网站访问统计三个实用案例展示了Cron的应用价值。掌握Cron定时任务的使用方法,是实现系统自动化运维的基础技能,能够帮助你减少重复性工作,提高运维效率。