首页 > 运维 > linux运维 > 正文

Linux日志怎么切割_Linux日志通过自定义切割脚本实现多目录管理的教程

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

linux日志怎么切割_linux日志通过自定义切割脚本实现多目录管理的教程

Linux系统中日志文件会随着时间不断增长,若不及时处理,可能占用大量磁盘空间甚至影响服务运行。虽然logrotate是标准的日志切割工具,但在多目录、自定义命名或特殊业务场景下,使用自定义脚本进行日志切割和分类管理更为灵活高效。下面介绍如何通过编写Shell脚本实现多目录日志的自动切割与归档。

1. 明确日志切割目标

在编写脚本前,先确定需求:

  • 哪些目录下的日志需要切割(如 /var/log/app1/, /var/log/app2/)
  • 按天、小时还是文件大小切割
  • 保留多少份历史日志
  • 是否需要压缩归档
  • 是否发送通知或清理过期日志

例如:每天凌晨对多个应用日志目录进行切割,保留最近7天的日志,旧日志以日期命名并压缩。

2. 编写自定义日志切割脚本

创建一个Shell脚本,例如 /opt/scripts/cut_logs.sh

!/bin/bash

日志根目录数组

LOG_DIRS=( "/var/log/app1" "/var/log/app2" "/var/log/myapp" )

获取昨天的日期(用于日志命名)

DATE=$(date -d "yesterday" +%Y%m%d)

DATE=$(date +%Y%m%d_%H%M) # 按小时切割可用此格式

循环处理每个日志目录

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
done
登录后复制

done

通义听悟
通义听悟

阿里云通义听悟是聚焦音视频内容的工作学习AI助手,依托大模型,帮助用户记录、整理和分析音视频内容,体验用大模型做音视频笔记、整理会议记录。

通义听悟 85
查看详情 通义听悟

可选:删除7天前的压缩日志

find /var/log -name "*.gz" -type f -mtime +7 -delete

该脚本支持多个日志目录,自动按日期重命名日志,并清空原始文件避免重启服务。压缩后通过find命令定期清理老旧日志。

3. 设置定时任务自动执行

使用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

4. 注意事项与优化建议

实际使用中需注意以下几点:

  • 确保应用对日志文件有写权限,清空文件不会导致写入失败
  • 某些服务需重新加载(如nginx -s reopen)才能继续写入原文件,可在脚本中加入reload命令
  • 可根据需要增加邮件通知功能(如用mail命令发送摘要)
  • 生产环境建议先在测试目录验证脚本逻辑
  • 避免在业务高峰期执行切割操作

基本上就这些。通过自定义脚本,你可以灵活控制日志切割策略,适应复杂目录结构和业务需求,比单纯依赖logrotate更可控。关键是理解mv + 清空的机制,并结合cron实现自动化。不复杂但容易忽略权限和应用兼容性问题。

以上就是Linux日志怎么切割_Linux日志通过自定义切割脚本实现多目录管理的教程的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号