Ζℤ 2024-09-18 21:34 采纳率: 87.5%
浏览 6

Shell脚本自动化脚本解决日志过大的问题

  1. 定期检查 /var/log/ 目录下的日志文件,如果某个日志文件的大小超过 100MB,则将其压缩成 .gz 文件,并删除原始日志文件。
  2. 每次压缩完成后,在日志目录中生成一个记录文件 compression_log.txt,记录压缩的文件名和压缩时间。
  3. 如果在压缩过程中遇到错误(例如文件被占用),请捕获并处理异常,记录到 compression_error_log.txt 文件中。
  • 脚本需要支持在 Linux 环境下运行。
  • 考虑如何高效地检查文件大小以及进行压缩操作。
  • 如何确保脚本能够长期、定时运行(提示:可以结合 cron 来实现)。
  • 写回答

1条回答 默认 最新

  • 一轮明月照丘壑 2024-09-18 21:35
    关注

    以下回复参考:皆我百晓生券券喵儿等免费微信小程序作答:

    你可以使用Shell脚本来实现这些需求。以下是一个简单的脚本示例,可以满足你的需求:

    #!/bin/bash
    
    LOG_DIR="/var/log/"           # 日志文件目录
    THRESHOLD_SIZE=100M            # 日志文件大小阈值
    COMPRESSION_LOG="${LOG_DIR}compression_log.txt"  # 压缩日志记录文件
    ERROR_LOG="${LOG_DIR}compression_error_log.txt"  # 错误日志记录文件
    
    # 检查日志文件并压缩
    check_and_compress() {
        local log_file="$1"
        local threshold="${2}"
        local log_size=$(stat -c "%s" "${log_file}")  # 获取文件大小(字节)
    
        if [ "${log_size}" -gt "${threshold}" ]; then  # 如果文件大小超过阈值
            echo "$(date '+%Y-%m-%d %H:%M:%S') - Compressing ${log_file}" >> "${COMPRESSION_LOG}"  # 记录开始压缩的时间
            gzip "${log_file}"  # 压缩文件
            if [ $? -eq 0 ]; then  # 检查压缩是否成功
                echo "$(date '+%Y-%m-%d %H:%M:%S') - Compressed ${log_file} successfully." >> "${COMPRESSION_LOG}"  # 记录成功压缩的时间
                rm "${log_file}"  # 删除原始日志文件
            else
                echo "Error compressing ${log_file}: $!" >> "${ERROR_LOG}"  # 记录压缩失败的信息和错误代码
            fi
        fi
    }
    
    # 遍历日志目录中的所有文件并检查大小
    find "${LOG_DIR}" -type f -exec bash -c 'check_and_compress "{}" "${THRESHOLD_SIZE}"' \;
    

    这个脚本首先定义了日志目录、大小阈值、压缩日志记录文件和错误日志记录文件的路径。然后定义了一个函数 check_and_compress 来检查并压缩单个日志文件。最后,使用 find 命令遍历日志目录中的所有文件并调用 check_and_compress 函数来处理每个文件。如果在压缩过程中遇到错误,错误信息和错误代码将被记录到 compression_error_log.txt 文件中。成功压缩的文件和压缩时间将被记录到 compression_log.txt 文件中。

    评论

报告相同问题?

问题事件

  • 创建了问题 9月18日