shell脚本日志清理和压缩

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
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
我的博客已迁移到xdoujiang.com请去那边和我交流
1、日志结构
/opt/online/ {123com,abccom} /log/online [1-9]/[a-z]
 
2、变量说明
#是否开启压缩功能(0:关闭,1:开启;若关闭压缩功能,则compressdayn无效)
needcompress=1
删除14天以前的日志
deldayn=14
前1天
lastdayn=1
服务类型
allsvrtype= "online1 online2 online3"
压缩5天前的日志
compressdayn=5
 
3、计划任务使用方法:
将该脚本本身copy到 /opt/online 下;
crontab 中配置成:
#30 0 * * * cd /opt/online && chmod +x cleanlog.sh && ./cleanlog.sh >/dev/null 2>&1
 
cat  cleanlog.sh
#!/bin/bash
#--------------------------------------------------  
#Created:2015-05-18
#Author:jimmygong
#Mail:jimmygong@taomee.com
#Function:
#Version:1.0
#--------------------------------------------------
allsvrtype= "online1 online2 online3"
deldayn=14
needcompress=1
compressdayn=5
lastdayn=1
 
alldomain= "123com abccom"
allsubdir= "a b c d e f g h i j k l m n o p q r s t u v w x y z"
rootdir= "/opt/online"
dirtobedelname= "tobedel"
 
lastday=` date  -d  "$lastdayn days ago"  +%Y%m%d`
compressday=` date  -d  "$compressdayn days ago"  +%Y%m%d`
delday=` date  -d  "$deldayn days ago"  +%Y%m%d`
 
function  cleandir ()
{
     local  ldir= "$1"
     local  lfiles=
     local  lfile=
 
     lfiles=` ls  -1 $ldir |  xargs `
     for  lfile  in  $lfiles
     do
         rm  -f $ldir/$lfile
     done
}
 
function  compressdir ()
{
     local  ldir= "$1"
     local  lfiles=
     local  lfile=
     local  lcompressedtarget= "$ldir/$compressday.tar.gz"
     # to prevent duplicate-compress
     if  [[ -f $lcompressedtarget ]]
     then
         return
     fi
     tar  zcvf $ldir. tar .gz $ldir
     if  [[ $? - ne  0 ]] ;  then
         return
     fi
     lfiles=` ls  -1 $ldir |  xargs `
     for  lfile  in  $lfiles
     do
         rm  -f $ldir/$lfile
     done
     if  [[ -f $ldir. tar .gz ]] ;  then
         mv  $ldir. tar .gz $lcompressedtarget
     fi
}
 
function  handleonelogdir ()
{
     local  ldir= "$1"
     local  lscandir= "$ldir/$dirtobedelname"
     local  lmvdir= "$lscandir/$lastday"
     local  lones=
     local  lone=
     local  lonefull=
     mkdir  -p $lscandir
     # remove
     lones=` ls  -1 $lscandir |  grep  $delday |  xargs `
     for  lone  in  $lones
     do
         lonefull= "$lscandir/$lone"
         if  [[ -d $lonefull ]] ;  then
             cleandir $lonefull
             rm  -rf $lonefull
         elif  [[ -f $lonefull ]] ;  then
             rm  -f $lonefull
         fi
     done
     # compress
     if  [[ $needcompress - eq  1 ]]
     then
         lones=` ls  -1 $lscandir |  grep  $compressday |  xargs `
         for  lone  in  $lones
         do
             lonefull= "$lscandir/$lone"
             if  [[ -d $lonefull ]]
             then
                 compressdir $lonefull
             elif  [[ -f $lonefull ]]
             then
                 tar  zcvf $lonefull. tar .gz $lonefull
             fi
         done
     fi
     # move last day's data
     mkdir  -p $lmvdir
     lones=` ls  -1 $ldir |  grep  $lastday |  xargs `
     for  lone  in  $lones
     do
         mv  $ldir/$lone $lmvdir
     done
}
 
for  domain  in  $alldomain
do
     domaindir= "$rootdir/$domain"
     if  [[ ! -d $domaindir ]]
     then
         continue
     fi
     for  svrtp  in  $allsvrtype
     do
         svrtplogdir= "$domaindir/log/$svrtp"
         if  [[ ! -d $svrtplogdir ]]
         then
             continue
         fi
         for  sub  in  $allsubdir
         do
             svrtplogsubdir= "$svrtplogdir/$sub"
             if  [[ ! -d $svrtplogsubdir ]]
             then
                 continue
             fi
             handleonelogdir  "$svrtplogsubdir"
         done
     done
done
 
exit  0









本文转自 xdoujiang 51CTO博客,原文链接:http://blog.51cto.com/7938217/1652898,如需转载请自行联系原作者
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值