定时自动清理日志的脚本实现

2025.5.29 杂七杂八 1788

本文详细介绍如何通过Shell脚本和Crontab实现定时自动清理日志文件,包含脚本编写逻辑、权限设置、日志轮转机制以及安全注意事项,帮助运维人员高效管理服务器存储空间。

一、日志清理的必要性

服务器日志文件会随时间不断累积,占用大量存储空间。未及时清理可能导致:

  • 磁盘空间耗尽引发服务异常
  • 系统性能下降
  • 关键日志被淹没在海量数据中
  • 合规审计困难

二、基础清理脚本实现

以下是一个简单的Shell脚本示例,可删除超过30天的日志文件:

!/bin/bash
 定义日志目录和保留天数
LOG_DIR="/var/log/app_logs"
DAYS_TO_KEEP=30

 查找并删除旧日志
find $LOG_DIR -type f -name ".log" -mtime +$DAYS_TO_KEEP -exec rm -f {} ;

 记录操作日志
echo "$(date '+%Y-%m-%d %H:%M:%S') - 已清理$LOG_DIR中超过${DAYS_TO_KEEP}天的日志" >> /var/log/cleanup.log
Bash

三、进阶功能实现

1. 日志压缩归档

 压缩7天前的日志
find $LOG_DIR -type f -name ".log" -mtime +7 -exec gzip {} ;
Bash

2. 按大小清理

 清理超过100MB的日志文件
find $LOG_DIR -type f -name ".log" -size +100M -exec rm -f {} ;
Bash

3. 排除特定日志

 保留重要的error.log
find $LOG_DIR -type f -name ".log" ! -name "error.log" -mtime +30 -delete
Bash

四、设置定时任务

使用crontab设置每天凌晨3点执行清理:

 编辑crontab
crontab -e

 添加以下行
0 3    /path/to/cleanup_script.sh >/dev/null 2>&1
Bash

五、安全注意事项

  • 执行前备份关键日志
  • 限制脚本执行权限:chmod 700 cleanup_script.sh
  • 设置正确的文件所有者:chown root:root cleanup_script.sh
  • 避免使用通配符删除(rm -rf )
  • 记录所有删除操作

六、日志轮转替代方案

对于生产环境,建议使用专业的日志管理工具:

  • Linux自带的logrotate
  • 第三方工具如Logstash
  • 云服务商的日志服务

通过合理配置定时清理脚本,可有效解决日志膨胀问题,建议结合监控系统设置磁盘空间告警,实现更全面的日志管理方案。

评论