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,如需转载请自行联系原作者