天天看点

Linux日志管理神器logrotate

logrotate 是一个 Bash 的 SHELL 脚本,可对日志文件进行切分,并将切分后的日志放在统一目录。

系统默认安装logrotate工具,主配置文件为/etc/logrotate.conf,一般我们会将配置文件放在/etc/logrotate.d/目录下。

logrotate配置文件参数解释:

daily/weekly/monthly/yearly:转储周期,每天、每周、每月、每年,任选其一,一般都是以”天“为周期

rotate 12:保留12个历史log版本

dateext:切割后的log文件以当前日期格式结尾(即xxx.log-20190401),如果注释掉,则是以数字方式递增结尾(即xxx.log.1)

compress:使用gzip压缩转储后的log,日志切割后自动压缩,压缩后缀为.gz

delaycompress:与compress选项一起使用,delaycompress指示logrotate不要将最近的日志压缩,压缩在下一次轮询周期进行。

missingok:忽略错误

notifempty:如果log是空,不转储

create 0664 www www:指定权限创建全新的log文件

logrotate命令几个常用的参数:

-d:debug模式,用于测试配置文件是否有错误

-f:强制执行log转储,即手动触发

-v:显示执行过程

-m:发送log到指定邮箱

例:手动执行log转储

logrotate -fv /etc/logrotate.d/mysql-log-rotate

这里以nginx和mysql举两个示例,可以根据自身情况修改使用

vi /etc/logrotate.d/nginx

1

vi /etc/logrotate.d/nginx

/var/log/nginx/*.log {

#create 0644 www www

daily

rotate 7

missingok

notifempty

compress

dateext

delaycompress

sharedscripts

postrotate

/bin/kill -USR1

cat /var/log/nginx/nginx.pid 2>/dev/null

2>/dev/null || true

endscript

}

vi /etc/logrotate.d/mysql

/usr/local/mysql/log/mysql*.log {

#create 600 mysql mysql

notifempty

daily

rotate 30

missingok

compress

dateext

delaycompress

sharedscripts

postrotate

/usr/local/mysql/bin/mysqladmin -uroot -p’password’ flush-logs

endscript

}

允许为单个配置指定多个日志文件,例如

/var/log/httpd/access.log

/var/log/httpd/error.log

/var/log/httpd/mysite/*.log

{

rotate 5

mail [email protected]

size 100k

sharedscripts

postrotate

/usr/bin/killall -HUP httpd

endscript

}

查看logrotate定时执行配置:

cat /etc/anacrontab

强制执行logrotate命令:

logrotate -vf /etc/logrotate.d/mmmmmm

继续阅读