logrotate运行机制
系统会定时运行logrotate,一般是每天一次。crontab会每天定时执行/etc/cron.daily目录下的脚本,而这个目录下有个文件叫logrotate
logrotate组成
1
2
3
4
| /usr/bin/logrotate # 程序所在目录
/etc/cron.daily/logrotate # 默认crontab每天执行一次logrotate
/etc/logrotate.conf # 全局配置文件
/etc/logrotate.d
|
安装
配置
vim /etc/logrotate.d/tomcat
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
| /data/tomcat/logs/catalina.out {
daily # 表示每天整理一次
copytruncate # 用于还在打开中的日志文件,把当前日志备份并截断
rotate 30 # 保留30天的备份文件,一定要备份该,如果不配置默认是0,也就是只允许存在一份日志,刚切出来的日志马上就会被删除
compress # 通过gzip压缩转储日志
notifempty # 如果是空文件,不转储
dateext # 文件后缀是日期格式,也就是切割后文件是xxx.log-20211217.gz
missingok # 如果日志不存在则忽略该警告信息
}
以下为不常用参数:
weekly 指定转储周期为每周
monthly 指定转储周期为每月
nocompress 不需要压缩时,用这个参数
nocopytruncate 备份日志文件但是不截断
create mode owner group 转储文件,使用指定的文件模式创建新的日志文件
nocreate 不建立新的日志文件
delaycompress 和 compress 一起使用时,转储的日志文件到下一次转储时才压缩
nodelaycompress 覆盖 delaycompress 选项,转储同时压缩
errors address 转储时的错误信息发送到指定的Email 地址
ifempty 即使是空文件也转储,这个是 logrotate 的缺省选项。
mail address 把转储的日志文件发送到指定的E-mail 地址
nomail 转储时不发送日志文件
olddir directory 转储后的日志文件放入指定的目录,必须和当前日志文件在同一个文件系统
noolddir 转储后的日志文件和当前日志文件放在同一个目录
prerotate/endscript 在转储以前需要执行的命令可以放入这个对,这两个关键字必须单独成行
postrotate/endscript 在转储以后需要执行的命令可以放入这个对,这两个关键字必须单独成行
|
测试
1
2
| logrotate -d /etc/logrotate.d/tomcat # 调试-d
logrotate -v -f /etc/logrotate.d/tomcat # 强制执行-f
|
案例
nginx 日志切割
cat /etc/logrotate.d/nginx
1
2
3
4
5
6
7
8
9
| /home/application/nginx/logs/*.log
{
missingok
daily
copytruncate
rotate 30
notifempty
dateext
}
|
tomcat 日志切割
cat /etc/logrotate.d/tomcat
1
2
3
4
5
6
7
8
| /home/application/tomcat/logs/catalina.out {
rotate 14
daily
copytruncate
compress
notifempty
missingok
}
|
mysql 日志切割
cat /etc/logrotate.d/mysql
1
2
3
4
5
6
7
8
9
10
11
| /home/application/Database/mysql5.7/data/mysqld.log
/home/application/Database/mysql5.7/data/slow_query.log
{
missingok
daily
copytruncate
rotate 30
notifempty
dateext
}
|