天天看點

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

<code>我的部落格已遷移到xdoujiang.com請去那邊和我交流</code>

<code>1、日志結構</code>

<code>/opt/online/</code><code>{123com,abccom}</code><code>/log/online</code><code>[1-9]/[a-z]</code>

<code>2、變量說明</code>

<code>#是否開啟壓縮功能(0:關閉,1:開啟;若關閉壓縮功能,則compressdayn無效)</code>

<code>needcompress=1</code>

<code>删除14天以前的日志</code>

<code>deldayn=14</code>

<code>前1天</code>

<code>lastdayn=1</code>

<code>服務類型</code>

<code>allsvrtype=</code><code>"online1 online2 online3"</code>

<code>壓縮5天前的日志</code>

<code>compressdayn=5</code>

<code>3、計劃任務使用方法:</code>

<code>将該腳本本身copy到</code><code>/opt/online</code><code>下;</code>

<code>crontab</code><code>中配置成:</code>

<code>#30 0 * * * cd /opt/online &amp;&amp; chmod +x cleanlog.sh &amp;&amp; ./cleanlog.sh &gt;/dev/null 2&gt;&amp;1</code>

<code>cat</code> <code>cleanlog.sh</code>

<code>#!/bin/bash</code>

<code>#--------------------------------------------------  </code>

<code>#Created:2015-05-18</code>

<code>#Author:jimmygong</code>

<code>#Mail:[email protected]</code>

<code>#Function:</code>

<code>#Version:1.0</code>

<code>#--------------------------------------------------</code>

<code>alldomain=</code><code>"123com abccom"</code>

<code>allsubdir=</code><code>"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"</code>

<code>rootdir=</code><code>"/opt/online"</code>

<code>dirtobedelname=</code><code>"tobedel"</code>

<code>lastday=`</code><code>date</code> <code>-d </code><code>"$lastdayn days ago"</code> <code>+%Y%m%d`</code>

<code>compressday=`</code><code>date</code> <code>-d </code><code>"$compressdayn days ago"</code> <code>+%Y%m%d`</code>

<code>delday=`</code><code>date</code> <code>-d </code><code>"$deldayn days ago"</code> <code>+%Y%m%d`</code>

<code>function</code> <code>cleandir ()</code>

<code>{</code>

<code>    </code><code>local</code> <code>ldir=</code><code>"$1"</code>

<code>    </code><code>local</code> <code>lfiles=</code>

<code>    </code><code>local</code> <code>lfile=</code>

<code>    </code><code>lfiles=`</code><code>ls</code> <code>-1 $ldir | </code><code>xargs</code><code>`</code>

<code>    </code><code>for</code> <code>lfile </code><code>in</code> <code>$lfiles</code>

<code>    </code><code>do</code>

<code>        </code><code>rm</code> <code>-f $ldir/$lfile</code>

<code>    </code><code>done</code>

<code>}</code>

<code>function</code> <code>compressdir ()</code>

<code>    </code><code>local</code> <code>lcompressedtarget=</code><code>"$ldir/$compressday.tar.gz"</code>

<code>    </code><code># to prevent duplicate-compress</code>

<code>    </code><code>if</code> <code>[[ -f $lcompressedtarget ]]</code>

<code>    </code><code>then</code>

<code>        </code><code>return</code>

<code>    </code><code>fi</code>

<code>    </code><code>tar</code> <code>zcvf $ldir.</code><code>tar</code><code>.gz $ldir</code>

<code>    </code><code>if</code> <code>[[ $? -</code><code>ne</code> <code>0 ]] ; </code><code>then</code>

<code>    </code><code>if</code> <code>[[ -f $ldir.</code><code>tar</code><code>.gz ]] ; </code><code>then</code>

<code>        </code><code>mv</code> <code>$ldir.</code><code>tar</code><code>.gz $lcompressedtarget</code>

<code>function</code> <code>handleonelogdir ()</code>

<code>    </code><code>local</code> <code>lscandir=</code><code>"$ldir/$dirtobedelname"</code>

<code>    </code><code>local</code> <code>lmvdir=</code><code>"$lscandir/$lastday"</code>

<code>    </code><code>local</code> <code>lones=</code>

<code>    </code><code>local</code> <code>lone=</code>

<code>    </code><code>local</code> <code>lonefull=</code>

<code>    </code><code>mkdir</code> <code>-p $lscandir</code>

<code>    </code><code># remove</code>

<code>    </code><code>lones=`</code><code>ls</code> <code>-1 $lscandir | </code><code>grep</code> <code>$delday | </code><code>xargs</code><code>`</code>

<code>    </code><code>for</code> <code>lone </code><code>in</code> <code>$lones</code>

<code>        </code><code>lonefull=</code><code>"$lscandir/$lone"</code>

<code>        </code><code>if</code> <code>[[ -d $lonefull ]] ; </code><code>then</code>

<code>            </code><code>cleandir $lonefull</code>

<code>            </code><code>rm</code> <code>-rf $lonefull</code>

<code>        </code><code>elif</code> <code>[[ -f $lonefull ]] ; </code><code>then</code>

<code>            </code><code>rm</code> <code>-f $lonefull</code>

<code>        </code><code>fi</code>

<code>    </code><code># compress</code>

<code>    </code><code>if</code> <code>[[ $needcompress -</code><code>eq</code> <code>1 ]]</code>

<code>        </code><code>lones=`</code><code>ls</code> <code>-1 $lscandir | </code><code>grep</code> <code>$compressday | </code><code>xargs</code><code>`</code>

<code>        </code><code>for</code> <code>lone </code><code>in</code> <code>$lones</code>

<code>        </code><code>do</code>

<code>            </code><code>lonefull=</code><code>"$lscandir/$lone"</code>

<code>            </code><code>if</code> <code>[[ -d $lonefull ]]</code>

<code>            </code><code>then</code>

<code>                </code><code>compressdir $lonefull</code>

<code>            </code><code>elif</code> <code>[[ -f $lonefull ]]</code>

<code>                </code><code>tar</code> <code>zcvf $lonefull.</code><code>tar</code><code>.gz $lonefull</code>

<code>            </code><code>fi</code>

<code>        </code><code>done</code>

<code>    </code><code># move last day's data</code>

<code>    </code><code>mkdir</code> <code>-p $lmvdir</code>

<code>    </code><code>lones=`</code><code>ls</code> <code>-1 $ldir | </code><code>grep</code> <code>$lastday | </code><code>xargs</code><code>`</code>

<code>        </code><code>mv</code> <code>$ldir/$lone $lmvdir</code>

<code>for</code> <code>domain </code><code>in</code> <code>$alldomain</code>

<code>do</code>

<code>    </code><code>domaindir=</code><code>"$rootdir/$domain"</code>

<code>    </code><code>if</code> <code>[[ ! -d $domaindir ]]</code>

<code>        </code><code>continue</code>

<code>    </code><code>for</code> <code>svrtp </code><code>in</code> <code>$allsvrtype</code>

<code>        </code><code>svrtplogdir=</code><code>"$domaindir/log/$svrtp"</code>

<code>        </code><code>if</code> <code>[[ ! -d $svrtplogdir ]]</code>

<code>        </code><code>then</code>

<code>            </code><code>continue</code>

<code>        </code><code>for</code> <code>sub </code><code>in</code> <code>$allsubdir</code>

<code>            </code><code>svrtplogsubdir=</code><code>"$svrtplogdir/$sub"</code>

<code>            </code><code>if</code> <code>[[ ! -d $svrtplogsubdir ]]</code>

<code>                </code><code>continue</code>

<code>            </code><code>handleonelogdir </code><code>"$svrtplogsubdir"</code>

<code>done</code>

<code>exit</code> <code>0</code>

本文轉自 xdoujiang 51CTO部落格,原文連結:http://blog.51cto.com/7938217/1652898,如需轉載請自行聯系原作者