在日常服务器运维过程中,对于日志整理是必不可少的,一般情况下都是通过shell"造轮子"来定时整理压缩log,大家往往忽略了一个linux下自带的一款日志管理神器logrotate,本篇文章针对logrotate一些参数使用进行了一下梳理。
logrotate是一个日志管理程序,用来把旧的日志文件删除(备份),并创建新的日志文件,这个过程称为"转储"。
系统默认安装logrotate工具,主配置文件为/etc/logrotate.conf,一般我们会将配置文件放在/etc/logrotate.d/目录下。
跟多参数内容可以见:http://man7.org/linux/man-pages/man8/logrotate.8.html
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 }
|----------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 | /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
|---|---------------------------| | 1 | 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 }
|----------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 | /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 } |