logrotate 真是好东西

  • 定义由logrotate处理的文件类别,系统 CentOS7.6_1810
    • 示例
    • vim /etc/logrotate.d/nginx
    • logrotate /etc/logrotate.d/nginx
    • logrotate -f /etc/logrotate.d/nginx
    • 相关文件
    • file /etc/cron.daily/logrotate
    • file /etc/logrotate.conf
    • file /etc/anacrontab
    • cat /var/lib/logrotate/logrotate.status
[root@yiis-ali logs]# cat /etc/logrotate.d/nginx 
/data/nginx/logs/*.log {
    daily
    missingok
    rotate 7
    dateext
    compress
    delaycompress
    notifempty
    create 640 root root
    sharedscripts
    postrotate
        if [ -f /data/nginx/logs/nginx.pid ]; then
                kill -USR1 `cat /data/nginx/logs/nginx.pid`
        fi
    endscript
}

  • Logrotate的疑问
    • sharedscripts的作用是什么 ?
      (shared scripts的作用是在所有的日志文件都轮转完毕后统一执行一次脚本。如果没有配置这条指令,那么每个日志文件轮转完毕后都会执行一次脚本)
    • rotate和maxage的区别是什么 ?
      (它们都是用来控制保存多少日志文件的,区别在于rotate是以个数为单位的,而maxage是以天数为单位的。如果我们是以按天来轮转日志,那么二者的差别就不大了)
    • 为什么生成日志的时间是凌晨四五点 ?
      (Logrotate是基于CRON运行,时间是由CRON控制的。具体可以查询CRON的配置文件[/etc/crontab] | /etc/anacrontab,可手动改成如23:59等时间执行)
    • 如何告诉应用程序重新打开日志文件 ?
      (以Nginx为例,是通过postrotate指令发送USR1信号来通知Nginx重新打开日志文件的。但是其他的应用程序不一定遵循这样的约定,比如说MySQL是通过flush-logs来重新打开日志文件的。更有甚者,有些应用程序就压根没有提供类似的方法,此时如果想重新打开日志文件,就必须重启服务,但为了高可用性,这往往不能接受。还好Logrotate提供了一个名为copytruncate的指令,此方法采用的是先拷贝再清空的方式,整个过程中日志文件的操作句柄没有发生改变,所以不需要通知应用程序重新打开日志文件,但是需要注意的是,在拷贝和清空之间有一个时间差,所以可能会丢失部分日志数据)

猜你喜欢

转载自blog.51cto.com/51eat/2433962