通过编写Shell脚本可实现Linux多目录日志的灵活切割与归档,1. 明确需处理的日志目录、切割周期(如按天)、保留份数(如7天)、是否压缩等需求;2. 编写脚本遍历指定日志目录,对*.log文件按日期重命名并移动,清空原文件以保持服务写入,随后压缩归档并清理过期日志;3. 配置cron定时任务每天凌晨执行脚本,确保自动化运行;4. 注意文件权限、服务重载(如nginx -s reopen)及避免业务高峰操作,提升稳定性和兼容性。

Linux系统中日志文件会随着时间不断增长,若不及时处理,可能占用大量磁盘空间甚至影响服务运行。虽然logrotate是标准的日志切割工具,但在多目录、自定义命名或特殊业务场景下,使用自定义脚本进行日志切割和分类管理更为灵活高效。下面介绍如何通过编写Shell脚本实现多目录日志的自动切割与归档。
在编写脚本前,先确定需求:
例如:每天凌晨对多个应用日志目录进行切割,保留最近7天的日志,旧日志以日期命名并压缩。
创建一个Shell脚本,例如 /opt/scripts/cut_logs.sh:
LOG_DIRS=( "/var/log/app1" "/var/log/app2" "/var/log/myapp" )
DATE=$(date -d "yesterday" +%Y%m%d)
for LOG_DIR in "${LOG_DIRS[@]}"; do
if [ ! -d "$LOG_DIR" ]; then
echo "目录不存在: $LOG_DIR"
continue
fi
# 进入日志目录
cd "$LOG_DIR" || continue
# 查找所有 .log 结尾的文件进行切割
for log_file in *.log; do
# 确保文件存在且非空
if [ -f "$log_file" ] && [ -s "$log_file" ]; then
# 构造新文件名:原名 + 日期
new_name="${log_file%.*}_${DATE}.log"
# 移动当前日志并清空原文件
mv "$log_file" "$new_name"
> "$log_file" # 清空原文件
# 压缩归档(可选)
gzip "$new_name"
echo "已切割: $LOG_DIR/$new_name.gz"
fi
donedone
find /var/log -name "*.gz" -type f -mtime +7 -delete
该脚本支持多个日志目录,自动按日期重命名日志,并清空原始文件避免重启服务。压缩后通过find命令定期清理老旧日志。
使用crontab让脚本每天自动运行:
运行命令:
crontab -e添加以下行(每天凌晨1点执行):
0 1 * * * /bin/bash /opt/scripts/cut_logs.sh >> /var/log/log_cut.log 2>&1确保脚本有执行权限:
chmod +x /opt/scripts/cut_logs.sh实际使用中需注意以下几点:
基本上就这些。通过自定义脚本,你可以灵活控制日志切割策略,适应复杂目录结构和业务需求,比单纯依赖logrotate更可控。关键是理解mv + 清空的机制,并结合cron实现自动化。不复杂但容易忽略权限和应用兼容性问题。
以上就是Linux日志怎么切割_Linux日志通过自定义切割脚本实现多目录管理的教程的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号