笔者一共有3台tomcat服务器,一共4个tomcat服务,未来还会增加4个作为负载,笔者想通过在存储服务器对tomcat服务的日志进行远程切割和备份到存储上。
文中采用清空日志的方式,优点是不用重启tomcat就能回收磁盘空间,缺点可能会丢失一小部分日志内容,所以笔者定时在了夜里3点执行。
本文中远程执行命令和scp用到了expect脚本,请查看expect的博文http://www.cnblogs.com/Eisenhower/p/7900907.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
|
#!/bin/sh back_date=` date -d "yesterday" +%F` #定义日期变量为昨天的日期
back_month=` date -d "0-month" +%Y-%m` #定义月份
#139=172.16.1.139 #140=172.16.1.140 #1521=172.16.1.152 #1522=172.16.1.152 for n in {139,140,1521,1522} #笔者152这台机器上有两个tomcat所以用1521和1522来表达
do if [ $n - eq 139 ]; then
tomcat_ip=172.16.1.139 #备份的tomcat地址
tomcat_path= /data/tomcat #tomcat路径
catalina_out=139_catalina_out #保存到本地项目路径
elif [ $n - eq 140 ]; then
tomcat_ip=172.16.1.140
tomcat_path= /data/tomcat
catalina_out=140_catalina_out
elif [ $n - eq 1521 ]; then
tomcat_ip=172.16.1.152
tomcat_path= /data/tomcat
catalina_out=1521_catalina_out
elif [ $n - eq 1522 ]; then
tomcat_ip=172.16.1.152
tomcat_path= /data/tomcat
catalina_out=1522_catalina_out
fi if [ ! -d /data/logs_back/ $tomcat_ip/$catalina_out/$back_month ]; then
mkdir -p /data/logs_back/ $tomcat_ip/$catalina_out/$back_month #创建路径,以tomcatIP、月份为目录
fi #远程执行拷贝命令,以时间命名日志进行切割 /data/expect .sh $tomcat_ip "cp $tomcat_path/logs/catalina.out $tomcat_path/logs/catalina" $back_date ".out"
#远程清空catalina.out /data/expect .sh $tomcat_ip ">$tomcat_path/logs/catalina.out"
#远程执行压缩命令,将切割的日志压缩 /data/expect .sh $tomcat_ip "gzip $tomcat_path/logs/catalina" $back_date ".out"
#远程拷贝到备份目录 /data/expect_scp .sh $tomcat_ip:$tomcat_path /logs/catalina "$back_date" .out.gz /nfs/logs_back/ $tomcat_ip/$catalina_out/$back_month/
#将备份好的日志从远程机器上删除,笔者发现gzip在shell中并没有删除源文件,这个问题留在之后验证 /data/expect .sh $tomcat_ip "rm -f $tomcat_path/logs/catalina" $back_date ".out*"
done |