具體場景:
Tomcat應用服務器產生的日誌量非常大,如果不及時處理其日誌,會導致服務器磁盤被塞滿,從而導致應用程序無法繼續正常運行。針對以上問題我們可以按照一定規則對其日誌進行處理(可以是移走,也可以是刪除)。
規則:當Tomcat日誌路徑下所有日誌文件總大小超過xx兆時,刪除掉日期最早的日誌文件,這樣可以保證硬盤空間的相對穩定,也保留最近期的日誌文件。
解答:
命令行測試
[root@myhost logs]# pwd
/usr/local/tomcat/logs
[root@myhost logs]# ll
總用量 34244
-rw-r--r--. 1 test root 38865 2月 26 15:12 catalina.2019-02-26.log
-rw-r--r--. 1 test root 1035 2月 28 10:44 catalina.2019-02-28.log
-rw-r--r--. 1 test root 4136 3月 2 09:38 catalina.2019-03-02.log
-rw-r--r--. 1 test root 65729 3月 5 09:46 catalina.out
-rw-r--r--. 1 test root 0 2月 26 15:11 host-manager.2019-02-26.log
-rw-r--r--. 1 test root 903 2月 26 15:12 localhost.2019-02-26.log
-rw-r--r--. 1 test root 3902958 2月 27 00:00 localhost_access_log.2019-02-26.txt
-rw-r--r--. 1 test root 8856907 2月 27 23:59 localhost_access_log.2019-02-27.txt
-rw-r--r--. 1 test root 6136397 3月 1 00:00 localhost_access_log.2019-02-28.txt
-rw-r--r--. 1 test root 3874887 3月 2 00:00 localhost_access_log.2019-03-01.txt
-rw-r--r--. 1 test root 3632150 3月 3 00:00 localhost_access_log.2019-03-02.txt
-rw-r--r--. 1 test root 3263432 3月 4 00:00 localhost_access_log.2019-03-03.txt
-rw-r--r--. 1 test root 3275050 3月 5 00:00 localhost_access_log.2019-03-04.txt
-rw-r--r--. 1 test root 1966372 3月 5 14:21 localhost_access_log.2019-03-05.txt
-rw-r--r--. 1 test root 0 2月 26 15:11 manager.2019-02-26.log
[root@myhost logs]# du -sm ./*
1 ./catalina.2019-02-26.log
1 ./catalina.2019-02-28.log
1 ./catalina.2019-03-02.log
1 ./catalina.out
0 ./host-manager.2019-02-26.log
1 ./localhost.2019-02-26.log
4 ./localhost_access_log.2019-02-26.txt
9 ./localhost_access_log.2019-02-27.txt
6 ./localhost_access_log.2019-02-28.txt
4 ./localhost_access_log.2019-03-01.txt
4 ./localhost_access_log.2019-03-02.txt
4 ./localhost_access_log.2019-03-03.txt
4 ./localhost_access_log.2019-03-04.txt
2 ./localhost_access_log.2019-03-05.txt
0 ./manager.2019-02-26.log
[root@myhost logs]# du -sh ./*
40K ./catalina.2019-02-26.log
4.0K ./catalina.2019-02-28.log
8.0K ./catalina.2019-03-02.log
72K ./catalina.out
0 ./host-manager.2019-02-26.log
4.0K ./localhost.2019-02-26.log
3.8M ./localhost_access_log.2019-02-26.txt
8.5M ./localhost_access_log.2019-02-27.txt
5.9M ./localhost_access_log.2019-02-28.txt
3.7M ./localhost_access_log.2019-03-01.txt
3.5M ./localhost_access_log.2019-03-02.txt
3.2M ./localhost_access_log.2019-03-03.txt
3.2M ./localhost_access_log.2019-03-04.txt
2.0M ./localhost_access_log.2019-03-05.txt
0 ./manager.2019-02-26.log
[root@myhost logs]# du -sh
34M .
[root@myhost logs]# du -sm
34 .
腳本實現
[root@myhost logs]# /home/script/logpath_monitor.sh
#!/bin/bash
source /etc/profile
#define variables
#指定日誌所在路徑
log_path="/home/apache-tomcat-7.0.78/logs"
#獲取指定路徑所有日誌文件的總大小,單位M
size_all=`du -s -m $log_path | awk '{print $1}'`
#設置一個基準時間(此時此刻),從1970年1月1日00:00:00到目前經歷的秒數
base_time=`date +"%s"`
#當指定路徑下日誌的總容量大於30M(我這裏設置得比較小的原因是方便測試)時,刪除最早創建的日誌文件
if [ "$size_all" -gt "30" ];then
for i in `ls $log_path`;
do
date_suffix=`echo $i | cut -d '.' -f 2`
#判斷截取出來的後綴字符串是否是out(因爲catalina.out日誌的存在)
if [ "$date_suffix" == "out" ];then
echo "i am catalina.out"
#這種情況的時候,需要跳出當前循環繼續下一個循環
continue;
fi
echo $date_suffix
date_i=`date -d "$date_suffix" +"%s"`
echo "date_i="$date_i
#再通過循環獲取最早日期的日誌文件
#if [ "$date_i" -lt "$base_time" ];then
if [ `echo $date_i | awk -v bi=$base_time '{print($1<bi)?"0":"1"}'` -eq "0" ];then
base_time=$date_i
fi
done
earliest_date=`date -d @"$base_time" +"%F"`
echo "----------------------------分割線----------------------------------------"
echo "earliest_date="$earliest_date
#上面執行成功即循環結束之後,我們最後base_time變量的值一定是最早日期
#然後我們便可以刪除掉我們獲取到的最早日期的日誌文件
if [ "$?" -eq "0" ];then
#先scp命令備份到專門存儲日誌的服務器上面,再進行刪除(略)
/bin/rm -rf $log_path/*.$earliest_date.log
/bin/rm -rf $log_path/*.$earliest_date.txt
echo "ok"
fi
fi
定時任務
最後,將該腳本添加進定時任務:每天執行一次,每天晚上2點執行該腳本
00 2 * * * root /home/script/logpath_monitor.sh