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