使用cronolog工具切分Tomcat的catalina.out日志文件
普通用户下载、安装cronolog
1
2
3
4
5
|
[tomcat@localhost ~]$ tar -xf cronolog-1.6.2.tar.gz
[tomcat@localhost ~]$ cd cronolog-1.6.2/
[tomcat@localhost cronolog-1.6.2]$ ./configure --prefix=/home/tomcat/cronolog
make
make install
|
root用户下下载、安装cronolog
1
2
3
4
5
6
7
|
[root@localhost ~]# rpm -qa |grep cronolog
[root@localhost ~]# tar zxvf cronolog-1.6.2.tar.gz
[root@localhost ~]# cd cronolog-1.6.2
[root@localhost cronolog-1.6.2]# ./configure
[root@localhost cronolog-1.6.2]# make && make install
[root@localhost cronolog-1.6.2]# which cronolog
/usr/local/sbin/cronolog
|
在普通用户的家目录下编辑.bash_profile文件里添加“$HOME/cronolog/sbin”添加cronolog的安装路径
[tomcat@localhost ~]$ vi .bash_profile
1
2
3
4
5
6
7
8
|
# .bash_profile
# Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
# User specific environment and startup programs
PATH=$PATH:$HOME/bin:$HOME/cronolog/sbin
export PATH
|
用which cronolog可以查到安装的路径,这个路径待会在修改catalina.sh时会用到。
修改catalina.sh 文件
将186行【CATALINA_OUT="$CATALINA_BASE"/logs/catalina.out】修改成187行【CATALINA_OUT="$CATALINA_BASE"/logs/opres.%Y-%m-%d.out】内容,日志名可以自行定义;
注释掉370行【touch "$CATALINA_OUT"】;
383、384行【
org.apache.catalina.startup.Bootstrap "$@" start \
>> "$CATALINA_OUT" 2>&1 "&"】替换成385、386行【
org.apache.catalina.startup.Bootstrap "$@" start 2>&1 \
| /home/tomcat/cronolog/sbin/cronolog "$CATALINA_OUT" >> /dev/null 2>&1 &
】;
396、397行【
org.apache.catalina.startup.Bootstrap "$@" start \
>> "$CATALINA_OUT" 2>&1 "&"
】替换成394、395行【
org.apache.catalina.startup.Bootstrap "$@" start 2>&1 \
| /home/tomcat/cronolog/sbin/cronolog "$CATALINA_OUT" >> /dev/null 2>&1 &
】;最后一步(394、395)要注意如果原本的命令只是注释掉,替换的内容一定要在原本内容的上面,不然无法正常启动,前面的替换(383、384)位置没有关系的
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
|
97 JAVA_OPTS=
"-Xms512m -Xmx1024m -Xss1024K -XX:PermSize=256m -XX:MaxPermSize=512m"
98
99
# OS specific support. $var _must_ be set to either true or false.
185
if
[ -z
"$CATALINA_OUT"
] ;
then
186
# CATALINA_OUT="$CATALINA_BASE"/logs/catalina.out
187 CATALINA_OUT=
"$CATALINA_BASE"
/logs/opres
.%Y-%m-%d.out
370
#touch "$CATALINA_OUT"
371
if
[
"$1"
=
"-security"
] ;
then
372
if
[ $have_tty -
eq
1 ];
then
373
echo
"Using Security Manager"
374
fi
375
shift
376
eval
"\"$_RUNJAVA\""
"\"$LOGGING_CONFIG\""
$LOGGING_MANAGER $JAVA_OPTS $CATALINA_OPTS \
377 -Djava.endorsed.
dirs
=
"\"$JAVA_ENDORSED_DIRS\""
-classpath
"\"$CLASSPATH\""
\
378 -Djava.security.manager \
379 -Djava.security.policy==
"\"$CATALINA_BASE/conf/catalina.policy\""
\
380 -Dcatalina.base=
"\"$CATALINA_BASE\""
\
381 -Dcatalina.home=
"\"$CATALINA_HOME\""
\
382 -Djava.io.tmpdir=
"\"$CATALINA_TMPDIR\""
\
383
# org.apache.catalina.startup.Bootstrap "$@" start \
384
# >> "$CATALINA_OUT" 2>&1 "&"
385 org.apache.catalina.startup.Bootstrap
"$@"
start 2>&1 \
386 |
/home/tomcat/cronolog/sbin/cronolog
"$CATALINA_OUT"
>>
/dev/null
2>&1 &
387
388
else
389
eval
"\"$_RUNJAVA\""
"\"$LOGGING_CONFIG\""
$LOGGING_MANAGER $JAVA_OPTS $CATALINA_OPTS \
390 -Djava.endorsed.
dirs
=
"\"$JAVA_ENDORSED_DIRS\""
-classpath
"\"$CLASSPATH\""
\
391 -Dcatalina.base=
"\"$CATALINA_BASE\""
\
392 -Dcatalina.home=
"\"$CATALINA_HOME\""
\
393 -Djava.io.tmpdir=
"\"$CATALINA_TMPDIR\""
\
394 org.apache.catalina.startup.Bootstrap
"$@"
start 2>&1 \
395 |
/home/tomcat/cronolog/sbin/cronolog
"$CATALINA_OUT"
>>
/dev/null
2>&1 &
396
# org.apache.catalina.startup.Bootstrap "$@" start \
397
# >> "$CATALINA_OUT" 2>&1 "&"
398
fi
|
可以通过./catalina.sh start 来查看配置文件是否正确;这样在/usr/local/tomcat/logs每天会自动生成opres.%Y-%m-%d.out文件,下面我们要做的是定期清理这些过期的文件,我们可以通过crontab来实现
1
2
3
4
|
[tomcat@localhost ~]$
crontab
-e
30 3 * * *
/bin/find
/home/tomcat/openapi/logs/
-mtime +7 -
type
f -name
"opres*.*.out"
-
exec
/bin/rm
-f {} \;
[tomcat@localhost ~]$
crontab
-l
30 3 * * *
/bin/find
/home/tomcat/openapi/logs/
-mtime +7 -
type
f -name
"opres*.*.out"
-
exec
/bin/rm
-f {} \;
|
每天凌晨3点半执行清除7天之前过期日志
或者
#每天凌晨3点执行删除前7天的所有tomcat生成的日志文件(切割的日志名字与原告先的一样只是加了日期catalina.%Y-%m-%d.out)
1
2
3
4
5
6
7
8
|
0 3 * * *
/bin/find
/opt/tomcat
-mtime +7 -
type
f -name
"catalina.*.out"
-
exec
/bin/rm
-rf {} \;
0 3 * * *
/bin/find
/opt/tomcat
-mtime +7 -
type
f -name
"catalina.*.log"
-
exec
/bin/rm
-rf {} \;
0 3 * * *
/bin/find
/opt/tomcat
-mtime +7 -
type
f -name
"host-manager.*.log"
-
exec
/bin/rm
-rf {} \;
0 3 * * *
/bin/find
/opt/tomcat
-mtime +7 -
type
f -name
"localhost.*.log"
-
exec
/bin/rm
-rf {} \;
0 3 * * *
/bin/find
/opt/tomcat
-mtime +7 -
type
f -name
" manager.*.log"
-
exec
/bin/rm
-rf {} \;
上面有些觉得写的太多,可以简为写成如下:
0 3 * * *
/bin/find
/opt/tomcat/logs/
* -mtime +7 -
exec
/bin/rm
-rf {} \;
|
命令说明:
/var/www/ 是查找文件的路径。
-type f 是指定文件类型为普通文件。
-mtime +30 是指修改时间距离现在30天的文件。
-exec rm -f 指执行删除匹配出来的文件并且不提示,有的系统需要带单引号,有的不需要。将以上命令,添加到crontab中,即可实现定期删除了。
比如,每天的1点30分钟实现删除,可以这样:
#每天凌晨1点执行删除前30天的日志文件
1
|
0 1 * * * find /aa/tomcat6.0/logs/* -mtime +30 -exec rm -f {} \;
|