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

Linux日志怎么切割_Linux日志利用shell脚本按周切割的自动化实现方法

爱谁谁
发布: 2025-11-13 12:56:03
原创
206人浏览过
使用shell脚本按周切割日志可避免磁盘占满,核心是通过date +%Y%V获取周标识,判断周变更后移动日志并重建文件,结合crontab每周一执行,确保服务不中断。

linux日志怎么切割_linux日志利用shell脚本按周切割的自动化实现方法

Linux系统中日志文件会随着时间不断增长,过大的日志不仅影响查看效率,还可能占满磁盘空间。为解决这个问题,可以使用shell脚本实现按周自动切割日志。相比logrotate等工具,自定义脚本更灵活,适合特定业务场景。

一、按周切割日志的核心思路

每周将当前日志归档一次,归档文件名包含年份和周数(如app_2024_W15.log),原日志清空或重命名后新建。关键点:

  • 通过date +%Y_%V获取当前年份和周数
  • 判断是否为本周首次执行(避免重复切割)
  • 移动旧日志并清空原文件句柄
  • 配合crontab定时执行

二、编写按周切割的shell脚本

以下是一个通用的日志按周切割脚本示例:

<font face="Courier New">
#!/bin/bash
<h1>日志源文件路径</h1><p>LOG_FILE="/var/log/myapp.log"</p><h1>归档目录</h1><p>ARCHIVE_DIR="/var/log/archive"</p><h1>获取年份+周数(如:2024_15)</h1><p>WEEK<em>TAG=$(date +%Y</em>%V)</p>
                    <div class="aritcle_card">
                        <a class="aritcle_card_img" href="/ai/1298">
                            <img src="https://img.php.cn/upload/ai_manual/000/000/000/175680203955338.png" alt="法语写作助手">
                        </a>
                        <div class="aritcle_card_info">
                            <a href="/ai/1298">法语写作助手</a>
                            <p>法语助手旗下的AI智能写作平台,支持语法、拼写自动纠错,一键改写、润色你的法语作文。</p>
                            <div class="">
                                <img src="/static/images/card_xiazai.png" alt="法语写作助手">
                                <span>31</span>
                            </div>
                        </div>
                        <a href="/ai/1298" class="aritcle_card_btn">
                            <span>查看详情</span>
                            <img src="/static/images/cardxiayige-3.png" alt="法语写作助手">
                        </a>
                    </div>
                <h1>创建归档目录</h1><p>[ ! -d "$ARCHIVE_DIR" ] && mkdir -p "$ARCHIVE_DIR"</p><h1>上周标记(用于判断是否已处理)</h1><p>LAST_WEEK_FILE="$ARCHIVE_DIR/.last_week"</p><h1>读取上次处理的周数,若无则初始化</h1><p>if [ -f "$LAST_WEEK_FILE" ]; then
LAST_PROCESSED=$(cat "$LAST_WEEK_FILE")
else
LAST_PROCESSED=""
fi</p><h1>如果当前周未处理,则进行切割</h1><p>if [ "$WEEK_TAG" != "$LAST_PROCESSED" ]; then
if [ -f "$LOG_FILE" ] && [ -s "$LOG_FILE" ]; then</p><h1>移动日志到归档目录</h1><pre class='brush:php;toolbar:false;'>    mv "$LOG_FILE" "$ARCHIVE_DIR/myapp_${WEEK_TAG}.log"
    # 重新创建空日志文件并保留权限
    touch "$LOG_FILE"
    chown --reference="$ARCHIVE_DIR/myapp_${WEEK_TAG}.log" "$LOG_FILE" 2>/dev/null || true
    chmod --reference="$ARCHIVE_DIR/myapp_${WEEK_TAG}.log" "$LOG_FILE" 2>/dev/null || true
fi
# 更新最后处理周数
echo "$WEEK_TAG" > "$LAST_WEEK_FILE"
登录后复制

fi

三、配置定时任务自动执行

使用crontab每周一凌晨执行脚本:

  • 保存脚本为/opt/scripts/rotate_log_by_week.sh
  • 添加可执行权限:chmod +x /opt/scripts/rotate_log_by_week.sh
  • 编辑定时任务:crontab -e
  • 添加如下行(每周一0点10分执行):
    10 0 * * 1 /opt/scripts/rotate_log_by_week.sh

四、注意事项与优化建议

实际部署时注意以下几点:

  • 确保运行脚本的用户对日志文件有读写权限
  • 应用需支持日志文件被清空或重写(多数服务支持)
  • 长期归档日志建议增加压缩功能(用gzip压缩)
  • 可加入简单的日志记录功能,便于排查问题
  • 定期清理过期归档(如保留最近8周)

基本上就这些。通过简单的shell脚本加cron,就能实现稳定可靠的按周日志切割机制,无需依赖额外软件,适合轻量级运维需求。关键是判断周变更和正确处理文件句柄,避免服务中断。不复杂但容易忽略细节。

以上就是Linux日志怎么切割_Linux日志利用shell脚本按周切割的自动化实现方法的详细内容,更多请关注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号