一、公司提供的参考脚本:
#!/bin/bash
# 定义需要清理的文件
log_file=(
"/mpjava/ly.mp.dfpv.acc.biz/bin/nohup.out"
"/mpjava/ly.mp.dfpv.acc.service/bin/nohup.out"
)
# 获取当天日期
date_now=$(date +%Y%m%d)for file_dir in $log_file
do# 获取文件路径dir=$(dirname $file_dir)# 获取文件名file_name_new=$(basename $file_dir)# 创建备份目录mkdir -p ${dir}/backup# 备份日志cp ${file_dir} ${dir}/backup/${date_now}_${file_name_new}# 清空日志echo "" > ${file_dir}# 删除历史cd ${dir}/backup/ && find . -type f -mtime +6 -exec rm -f {} \;
done
验证结果:并未验证成功
二、自己改进后脚本:
#!/bin/bash# 定义需要清理的文件
log_file=("/mpjava/ly.mp.dfpv.acc.biz/bin/nohup.out""/mpjava/ly.mp.dfpv.acc.service/bin/nohup.out"
)# 获取当前日期和时间,用于备份文件名中包含时间戳
date_now=$(date +%Y%m%d_%H%M)for file_dir in "${log_file[@]}"
doif [[ ! -f "$file_dir" ]]; thenecho "Warning: File $file_dir does not exist, skipping."continuefi# 获取文件路径和文件名dir=$(dirname "$file_dir")file_name_new=$(basename "$file_dir")# 创建备份目录mkdir -p "${dir}/backup"# 备份日志,添加时间戳避免覆盖backup_file="${dir}/backup/${date_now}_${file_name_new}"cp "$file_dir" "$backup_file" && echo "Backup created: $backup_file" || echo "Error: Failed to backup $file_dir"# 清空日志> "$file_dir" && echo "Log cleared: $file_dir" || echo "Error: Failed to clear log $file_dir"# 删除超过7天的日志find "${dir}/backup" -type f -mtime +6 -exec rm -f {} \; &>/dev/nullif [[ $? -eq 0 ]]; thenecho "Old logs removed from ${dir}/backup"elseecho "Error occurred while removing old logs from ${dir}/backup"fi
done
脚本执行过程:
执行脚本前:
执行脚本后:
结论:这个脚本是通用性脚本,nginx、各中间件、应用服务等日志清理都可以使用,只需要修改log_file变量为自己环境具体路径 和 日志文件即可