centos针对大量日志定时压缩清理(亲测可用)

1.脚本目录

[demo@iZuf66lb4ux3z43gzhrbcdZ 2023-12-09]$ /home/demo/sbin/

2.脚本权限修改

chmod +x xx.sh

3.脚本内容

chmod +x xx.sh
3.1 cleanYesterdayLog.sh

对昨天之前的日志进行压缩

#!/bin/bash

# 指定目录
log_dir="/home/demo/logs"

# 获取昨天日期,格式为 yyyy-MM-dd
yesterday_date=$(date -d "yesterday" "+%Y-%m-%d")

# 拼接昨天日期目录的路径
yesterday_date_dir="${log_dir}/${yesterday_date}"

# 检查目录是否存在
if [ -d "${yesterday_date_dir}" ]; then
    # 切换到指定日期目录
    cd "${yesterday_date_dir}" || exit 1

    # 查找 .log 文件并进行压缩
    find . -type f -name "*.log" -exec ls -t {} + | while read -r log_file; do
        # 获取文件名(不包含扩展名)
        base_name=$(basename "${log_file}" .log)
        
        # 获取文件的修改时间,格式为 HHMM
        modification_time=$(stat -c %y "${log_file}" | cut -d ' ' -f 2 | cut -d ':' -f 1,2 | tr ':' '.')
        
        # 压缩文件
        tar -czvf "${base_name}.${modification_time}.tar.gz" "${log_file}"

        echo "压缩完成:${base_name}.${modification_time}.tar.gz"

        # 删除已压缩的日志文件
        rm "${log_file}"

        echo "已删除yesterday file:${log_file}"
    done
else
    echo "yesterday目录不存在:${yesterday_date_dir}"
fi

第二种是只压缩昨天如skyapm-20240503.log 2024-04-27.3.log 2024-05-02.log格式的日志

#!/bin/bash  
  
# 获取昨天的日期格式(YYYY-MM-DD)  
YESTERDAY=$(date --date="yesterday" +"%Y-%m-%d")  
  
# 定义日志目录  
LOG_DIR="/home/demo/logs/"  
  
# 遍历日志目录及其子目录  
find "$LOG_DIR" -type f -name "${YESTERDAY}*.log" | while read -r LOG_FILE; do  
    # 获取文件所在的目录  
    DIR=$(dirname "$LOG_FILE")  
      
    # 构造压缩文件名(不包括路径)  
    BASENAME=$(basename "$LOG_FILE")  
    TAR_FILE="${DIR}/${BASENAME%.log}.tar.gz"  
      
    # 执行压缩并删除原文件  
    tar -czvf "$TAR_FILE" "$LOG_FILE" && rm "$LOG_FILE"  
      
    # 检查命令是否成功执行  
    if [ $? -eq 0 ]; then  
        echo "File $LOG_FILE compressed and deleted successfully."  
    else  
        echo "Failed to compress and delete file $LOG_FILE."  
    fi  
done

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

find "$LOG_DIR" -type f -name "skyapm-${YESTERDAY_YYYYMMDD}.log" | while read -r LOG_FILE; do
    # 获取文件所在的目录  
    DIR=$(dirname "$LOG_FILE")

    # 构造压缩文件名(不包括路径)  
    BASENAME=$(basename "$LOG_FILE")
    TAR_FILE="${DIR}/${BASENAME%.log}.tar.gz"

    # 执行压缩并删除原文件  
    tar -czvf "$TAR_FILE" "$LOG_FILE" && rm "$LOG_FILE"

    # 检查命令是否成功执行  
    if [ $? -eq 0 ]; then
        echo "File $LOG_FILE compressed and deleted successfully."  
    else
        echo "Failed to compress and delete file $LOG_FILE."  
    fi
done

3.2 cleanLog.sh

对今天的日志进行压缩

#!/bin/bash

# 指定目录
log_dir="/home/demo/logs"

# 获取当前日期,格式为 yyyy-MM-dd
current_date=$(date +"%Y-%m-%d")

# 拼接当前日期目录的路径
current_date_dir="${log_dir}/${current_date}"

# 检查目录是否存在
if [ -d "${current_date_dir}" ]; then
    # 切换到指定日期目录
    cd "${current_date_dir}" || exit 1

    # 查找 .log 文件并进行压缩,排除创建日期最新的一个 .log 文件
    find . -type f -name "*.log"  -mmin +120 -exec ls -t {} + | while read -r log_file; do
        # 获取文件名(不包含扩展名)
        base_name=$(basename "${log_file}" .log)
        
        # 获取文件的修改时间,格式为 HHMM
        modification_time=$(stat -c %y "${log_file}" | cut -d ' ' -f 2 | cut -d ':' -f 1,2 | tr ':' '.')
        
        # 压缩文件
        tar -czvf "${base_name}.${modification_time}.tar.gz" "${log_file}"

        echo "压缩完成:${base_name}.${modification_time}.tar.gz"

        # 删除已压缩的日志文件
        rm "${log_file}"

        echo "已删除:${log_file}"
    done
else
    echo "目录不存在:${current_date_dir}"
fi
3.3 auto-delete-7-days-ago-log.sh

删除掉7天以前的日志

#!/bin/sh
find /home/demo/logs -name "*" -mtime +7 -type d -exec rm -rf {} +;

4.crontab配置

4.1 root用户
sudo su root
4.2 编辑定时器
# 编辑定时器
crontab -e
# 添加以下命令
0 */1 * * * /home/demo/sbin/cleanLog.sh  > /home/iotuser/sbin/cleanLog.log 2>&1
0 0 * * * /home/demo/sbin/auto-delete-7-days-ago-log.sh > /home/iotuser/sbin/auto_delete.log 2>&1
30 0 * * * /home/demo/sbin/cleanYesterdayLog.sh  > /home/iotuser/sbin/cleanYesterdayLog.log 2>&1
4.3 查看定时器
[root@iZuf66lb4ux3z43gzhrbcgZ sbin]# crontab -l
0 */1 * * * /home/demo/sbin/cleanLog.sh  > /home/demo/sbin/cleanLog.log 2>&1
0 0 * * * /home/demo/sbin/auto-delete-7-days-ago-log.sh > /home/demo/sbin/auto_delete.log 2>&1
30 0 * * * /home/demo/sbin/cleanYesterdayLog.sh  > /home/demo/sbin/cleanYesterdayLog.log 2>&1 
4.4 加载重启定时器
/sbin/service crond reload
/sbin/service crond restart
/sbin/service crond status
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值