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,如需转载请自行联系原作者
相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
相关文章
|
1月前
|
Linux Shell
Linux手动清理Linux脚本日志定时清理日志和log文件执行表达式
Linux手动清理Linux脚本日志定时清理日志和log文件执行表达式
243 1
|
2月前
|
监控 安全 Shell
防止员工泄密的措施:在Linux环境下使用Bash脚本实现日志监控
在Linux环境下,为防止员工泄密,本文提出使用Bash脚本进行日志监控。脚本会定期检查系统日志文件,搜索敏感关键词(如"password"、"confidential"、"secret"),并将匹配项记录到临时日志文件。当检测到可疑活动时,脚本通过curl自动将数据POST到公司内部网站进行分析处理,增强信息安全防护。
112 0
|
2月前
|
Shell Linux C语言
【Shell 命令集合 网络通讯 】Linux 查看系统中的UUCP日志文件 uulog命令 使用指南
【Shell 命令集合 网络通讯 】Linux 查看系统中的UUCP日志文件 uulog命令 使用指南
32 0
|
2月前
|
监控 Shell Linux
【Shell 命令集合 系统管理 】Linux 自动轮转(log rotation)日志文件 logrotate命令 使用指南
【Shell 命令集合 系统管理 】Linux 自动轮转(log rotation)日志文件 logrotate命令 使用指南
57 0
|
3天前
|
XML SQL 运维
关于日志的清理
关于日志的清理
10 0
|
13天前
|
弹性计算 运维 Shell
清理日志文件
【4月更文挑战第29天】
16 1
|
28天前
|
消息中间件 存储 Kafka
【Kafka】Kafka 的日志保留期与数据清理策略
【4月更文挑战第13天】【Kafka】Kafka 的日志保留期与数据清理策略
|
1月前
|
SQL 存储 关系型数据库
Mysql主从同步 清理二进制日志的技巧
Mysql主从同步 清理二进制日志的技巧
12 1
|
2月前
|
XML 运维 监控
【深入探究 C++ 日志库清理策略】glog、log4cplus 和 spdlog 的日志文件管理策略
【深入探究 C++ 日志库清理策略】glog、log4cplus 和 spdlog 的日志文件管理策略
82 0
|
2月前
|
Shell Linux C++
【Shell 编程设计】 编写自己的清理后台的Shell脚本
【Shell 编程设计】 编写自己的清理后台的Shell脚本
34 1