You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

日志文件自动压缩并邮件发送脚本实现及代码优化咨询

完善日志自动管理脚本

我来帮你修复并优化这个日志脚本,解决原代码里的语法错误和功能缺陷,确保它能稳定完成日志写入、大小监控、压缩归档、邮件发送和日志清空的完整流程。

原代码存在的问题

  • 条件判断语法错误:[" $FILESIZE" -gt "150000"] 中,[ 后和 ] 前必须有空格,否则会触发语法错误
  • 邮件发送逻辑错误:原代码的sendmail用法完全不正确,缺少必要的邮件头(发件人、主题等),且指向了错误的压缩文件名
  • 压缩命令冗余:单个文件压缩不需要-r参数,反而会增加不必要的开销
  • 日志写入无时间戳:纯数字日志可读性差,不利于问题排查
  • 缺少错误处理和提示:执行过程没有反馈,出问题难以定位

完整优化后的脚本

#!/bin/bash

# 配置项:可根据需求修改
LOG_FILE="as.log"
# 150KB 转换为字节(1KB=1024字节),原代码用150000,这里用精确值153600
MAX_SIZE=$((150 * 1024))
RECIPIENT_EMAIL="kaanmrzl@gmail.com"
SENDER_EMAIL="log-monitor@your-server.com"

# 循环写入日志内容
for i in {1..1000}
do
    # 写入带时间戳的日志条目
    echo "$(date +"%Y-%m-%d %H:%M:%S") - 日志条目 #$i" >> "$LOG_FILE"
    
    # 获取当前日志文件大小
    FILESIZE=$(stat -c%s "$LOG_FILE")
    
    # 检查是否超过大小阈值
    if [ "$FILESIZE" -gt "$MAX_SIZE" ]; then
        # 生成带精确时间的压缩文件名(避免同一天多次归档重名)
        ZIP_ARCHIVE="${LOG_FILE}-$(date +"%Y-%m-%d_%H-%M-%S").zip"
        
        # 压缩日志文件
        if zip "$ZIP_ARCHIVE" "$LOG_FILE"; then
            echo "成功生成归档文件:$ZIP_ARCHIVE"
            
            # 发送归档邮件(包含必要的邮件头)
            {
                echo "From: $SENDER_EMAIL"
                echo "To: $RECIPIENT_EMAIL"
                echo "Subject: 日志归档通知 - $(date +"%Y-%m-%d %H:%M:%S")"
                echo "Content-Type: text/plain; charset=utf-8"
                echo ""
                echo "日志文件 $LOG_FILE 已达到大小阈值($MAX_SIZE 字节),已自动归档为:"
                echo "$ZIP_ARCHIVE"
                echo ""
                echo "原日志文件已清空,将继续记录新的日志内容。"
            } | sendmail -t
            
            # 清空原日志文件
            if truncate -s 0 "$LOG_FILE"; then
                echo "原日志文件已成功清空"
            else
                echo "错误:无法清空日志文件 $LOG_FILE" >&2
            fi
        else
            echo "错误:无法压缩日志文件到 $ZIP_ARCHIVE" >&2
        fi
    fi
    
    # 可选:添加短延迟,模拟真实场景下的日志写入频率(可根据需求调整或删除)
    sleep 0.1
done

关键改进说明

  1. 配置项分离:把日志路径、大小阈值、邮箱地址等做成变量,方便后续修改
  2. 时间戳日志:每条日志添加精确的时间,大幅提升可读性
  3. 正确的条件判断:修复了[和]的空格问题,确保语法正确
  4. 精确归档命名:压缩文件名添加时分秒,避免同一天多次归档出现重名覆盖
  5. 完善的邮件格式:添加了发件人、主题、字符编码等必要邮件头,确保邮件能正常送达且格式规范
  6. 错误处理:对压缩和清空操作添加了成功/失败判断,输出提示信息,方便排查问题
  7. 延迟控制:添加sleep 0.1避免瞬间写满日志,模拟真实业务场景的日志写入节奏

使用前准备

  1. 确保系统安装了必要工具:
    # Debian/Ubuntu 系统
    sudo apt update && sudo apt install zip sendmail
    
    # RHEL/CentOS 系统
    sudo yum install zip sendmail
    
  2. 给脚本添加执行权限:
    chmod +x log-manager.sh
    
  3. 配置sendmail:如果是生产环境,需要确保sendmail能连接到SMTP服务器发送邮件;本地测试可配置邮件转发或使用第三方SMTP服务(具体配置可参考系统文档)

内容的提问来源于stack exchange,提问作者Kaan Murzoğlu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 08:34:04