生產環境日誌清理腳本

1、需求

生產上有40多個微服務部署的應用,每一個應用都會產生日誌,隨着時間的增加,日誌量不斷增大,現須要清理。有兩個重要的應用日誌需保留90天,其它應用保留20天。git

2、模擬產生日誌文件

[root@ansible-awx ~]# more file_create.sh 
#/bin/bash
for k in {1..10}
do
  mkdir -p /tmp/file_log/log_dir"$k"
  for i in {03..06}
  do
    for j in {01..30}
    do 
      touch -mt 2020"$i""$j"0000 /tmp/file_log/log_dir"$k"/file_log_2020-"$i"-"$j".log
    done
  done
done

在/tmp/file_log目錄新建log_dir1--log_dir10共10個目錄,每一個目錄下生成3月到6月的日誌文件;日誌的建立時間和文件名時間後綴相同。github

image-20200717175029076

文件生成時間模擬生產日誌文件時間。bash

3、清理腳本

#!/bin/bash

Days1=20
Days2=90

log_directory1=/tmp/file_log
log_directory2=/tmp/file_log/log_dir1
log_directory3=/tmp/file_log/log_dir2

#刪除除log_dir1和log_dir2的日誌,保留期限爲Days1
find $log_directory1 \( -path $log_directory2 -o -path $log_directory3 \)  -prune -o -type f -mtime +$Days1  -exec rm {} \;

#刪除log_dir1和log_dir2的日誌,保留期限爲Days2
find $log_directory2 -type f -mtime +$Days2 -exec rm {} \;
find $log_directory3 -type f -mtime +$Days2 -exec rm {} \;

清理腳本原理:使用find查找指定目錄($log_directory)下全部日誌文件(-type f),有時會去除不須要的目錄"\( -path \$log_directory2 -o -path \$log_directory3 \)",再按照文件生成日期和時間參數(-mtime \$Day)來清除(exec rm {} \) ide

image-20200717175539948

清理腳本執行前每一個日誌目錄log_dir有121個日誌文件,執行完清理腳本後對應的減小。微服務

4、定時任務

將腳本部署爲定時任務,天天零點定時執行:日誌

[root@ansible-awx ~]# crontab -l
0 0 * * * /root/file_cleanup.sh >/dev/null 2>&1

 
 

本文因此腳本已上傳githubcode

相關文章
相關標籤/搜索