0
点赞
收藏
分享

微信扫一扫

分享一个日志分割脚本——支持多日志分割

半夜放水 2024-05-08 阅读 7

环境:linux 工具:shell 用途:支持同一目录下,自定义多日志进行分割、自定义保存日志天数..

#!/bin/bash
#日志所在的目录绝对路径,举例/home/test/
files_path="/home/test/"
files_dir=${files_path}$(date -d "yesterday" +"%Y")/$(date -d "yesterday" +"%m")
#日志所在的目录绝对路径的名字支持多日志分割,比如有test.log、123.log 2个日志需要做分割
#只需要填写 test 123即可
log_files_name=(test 123)
#期望保存的日志时间,如图7天,单位“天”。过期启动删除
save_days=7
file_del= ${files_path}$(date -d "yesterday" +"%Y")/


mkdir -p $files_dir
log_files_num=${#log_files_name[@]}
for((i=0;i<$log_files_num;i++));do
mv ${files_path}${log_files_name[i]}.log ${files_dir}/${log_files_name[i]}_$(date -d "yesterday" +"%Y%m%d").log
done

find $file_del -type f -mtime +$save_days -exec rm -rf {} \; 


#完事,crontab -e 加入循环即可

以下是测试板块,仅通过自测

#testing项目,删除./2024年(举例,脚本可以自动识别年)下的非本月的目录
#获取本月月份以及获取2024目录下有多少个月份目录
date=`date "+%Y-%m-%d" | awk -F '-' '{print $2}'`
doc=`find  $file_del -type d`
#带入循环,如果这个月份用du -sh 查看只有1行且这行的第一列为0,则说明本月份目录下没有日志文件,直接删除。如果目录名称为本月月份则不用管
for i in $doc
do
  if [ $date   !=  $i ];then
   test1=`du -sh $file_del$i | awk -F ''  '{print $1}'`
   test2=`du -sh $file_del$i | wc -l`
     if [ $test1 == 0  ] || [ $test1 == 1  ];then
       rm -rf $file_del$i
     fi
  fi
done

#如果有年目录下,删除过期月份目录的代码的需求,此项模块为测试代码,未用于实际环境

总结:支持写死绝对路径情况下的多日志分割,会在日志所在的目录绝对路径下生成子目录 ./2024/05/(每几天分割的日志位置) 缺点:使用本脚本时候,备份的日志不要放在同级目录下就加一个*.bak。会被分割的! 备份日志可以选择放在非本级目录下

举报

相关推荐

0 条评论