shell编程---linux的应用日志监控和定期处理

具体场景:

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

猜你喜欢

转载自blog.csdn.net/yuki5233/article/details/88184029