Shell 脚本实战:自动定时清理日志文件,彻底磁盘爆满问题

之前分享了如何快速处理磁盘爆满的问题:《快速定位和解决磁盘爆满问题的五步法,建议收藏

今天分享一下如何定期处理日志,自动化解决磁盘爆满的问题,让你多摸一会鱼!

1. 实战目标清理指定目录中超过一定天数的日志文件支持多个日志后缀(如 .log、.out、.txt)记录每次执行日志设为 crontab 定时执行2. Shell 脚本代码
复制
vim /opt/clean_expired_logs.sh1.
复制
#!/bin/bash # ========== 基础配置 ========== # 目标日志目录(请根据实际修改) LOG_DIR="/data/css2/tomcat/logs/" # 日志文件扩展名,例如 log、txt、out 等 LOG_EXT="out" # 日志保留天数(大于此天数的文件将被删除) KEEP_DAYS=7 # 脚本运行日志(记录清理过程和异常) SCRIPT_LOG="/var/log/clean_logs_script.log" # ========== 开始执行 ========== echo"[$(date +%F %T)] 开始执行日志清理任务..." >> "$SCRIPT_LOG" # 检查目标目录是否存在 if [ ! -d "$LOG_DIR" ]; then echo"[$(date +%F %T)] 错误:目录 $LOG_DIR 不存在!任务终止。" >> "$SCRIPT_LOG" exit 1 fi # 执行日志清理 echo"[$(date +%F %T)] 正在删除 $KEEP_DAYS 天前的 *.$LOG_EXT 文件..." >> "$SCRIPT_LOG" find "$LOG_DIR" -type f -name "*.$LOG_EXT" -mtime +$KEEP_DAYS -print -exec rm -f {} \; >> "$SCRIPT_LOG" 2>&1 echo"[$(date +%F %T)] 日志清理任务完成。" >> "$SCRIPT_LOG"1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.21.22.23.24.25.26.27.28.29.

3. 测试运行

保存脚本为clean_expired_logs.sh。

赋予执行权限:

复制
chmod +x clean_expired_logs.sh1.

手动运行测试:

复制
./clean_expired_logs.sh1.

可查看运行日志:

复制
cat /var/log/clean_logs_script.log1.

4. 设置定时任务

通过 crontab 每天凌晨2点自动执行:

复制
crontab -e1.

添加内容:

复制
0 2 * * * /bin/bash /opt/clean_expired_logs.sh1.
5. 扩展建议

功能扩展

方法

清理多个目录

用数组或循环遍历多个 $LOG_DIR

支持多个后缀名

-name "*.log" -o -name "*.out"

删除前预览文件

先用 -print 查看再执行 rm

清理后统计空间

加入 du -sh $LOG_DIR 输出前后对比

阅读剩余
THE END