美文网首页
[Linux-Tool] logrotate

[Linux-Tool] logrotate

作者: 帅可儿妞 | 来源:发表于2019-08-06 17:54 被阅读0次

    之前的日志一直使用 nohup <command> 2>&1 & 来处理的,奈何数据量太大,几天没有去看,结果磁盘满了,现在准备使用CentOS自带的logrotate实现日志的管理

    一、配置

    1. 因为是自带的,所以安装的过程就不用考虑了,系统,yum的日志都使用logrotate来管理日志
    2. /etc/logrotate.d中编辑一个文件,如:flume
      vi flume
      
    3. 在上面的配置文件中添加配置项
      /usr/libra/flume/logs/*.log 
      {
          copytruncate
          daily
          dateext
          missingok
          rotate 15
          notifempty
          create
      }
      
    4. 常用配置
      命令 解释
      compress 通过 gzip 压缩转储以后的日志
      nocompress 不需要压缩时,用这个参数
      copytruncate 用于还在打开中的日志文件,把当前日志备份并截断,其操作是:先把该日志文件拷贝到新创建的文件中,再把该日志文件清空
      nocopytruncate 备份日志文件但是不截断
      create[ <mode> <owner> <group>] 转储文件,使用指定的文件模式创建新的日志文件,参数可以省略
      nocreate 不建立新的日志文件
      delaycompress 和 compress 一起使用时,转储的日志文件到下一次转储时才压缩
      nodelaycompress 覆盖 delaycompress 选项,转储同时压缩。
      errors address 专储时的错误信息发送到指定的Email 地址
      ifempty 即使是空文件也转储,这个是 logrotate 的缺省选项。
      notifempty 如果是空文件的话,不转储
      mail address 把转储的日志文件发送到指定的E-mail 地址
      nomail 转储时不发送日志文件
      olddir <directory> 转储后的日志文件放入指定的目录,必须和当前日志文件在同一个文件系统
      noolddir 转储后的日志文件和当前日志文件放在同一个目录下
      prerotate/endscript 在转储以前需要执行的命令,这两个关键字必须单独成行
      postrotate/endscript 在转储以后需要执行的命令,这两个关键字必须单独成行
      sharedscripts sharedscripts的作用是在所有的日志文件都轮转完毕后统一执行一次脚本。如果没有配置这条指令,那么每个日志文件轮转完毕后都会执行一次脚本。当然了,如果你没有定义prerotate和postrotate,也就不用这个参数了
      daily 指定转储周期为每天
      weekly 指定转储周期为每周
      monthly 指定转储周期为每月
      rotate <count> 指定日志文件删除之前转储的次数,0 指没有备份,5 指保留5 个备份
      tabootext [ ] list 让 logrotate 不转储指定扩展名的文件,缺省的扩展名是:.rpm-orig, .rpmsave, v, 和 ~
      size <size> 当日志文件到达指定的大小时就转储,size 可以指定 bytes (缺省)以及KB (sizek)或者MB (sizem),如 sizek 100ksizem 100M
      missingok 在日志轮循期间,任何错误将被忽略,例如“文件无法找到”之类的错误等

    二、运行

    1. 默认会在指定的时间自动执行,但是也可以手动执行
      • 运行所有的logrotate:
        # logrotate /etc/logrotate.conf
        
      • 运行某个logrotate:
        # logrotate /etc/logrotate.d/<logrotate-config-file>
        
      • 强制运行rotate: 不管文件有没有达到默认的1M
        # logrotate -f /etc/logrotate.d/<logrotate-config-file>
        
    2. 注意事项
      • 系统默认使用cron执行logrotate,加载默认配置文件/etc/logrotate.conf,默认情况下每周转储,保留4份历史日志
      • 手动执行logrotate配置文件不会加载配置文件/etc/logrotate.conf,默认转储大于1M的日志,且不保留历史日志,所以最好在自己的配置文件(/etc/logrotate.d/<your-config>)中把配置写全,下面的也是一样的
      • 手动强制(-f)执行logrotate配置文件也不会加载配置文件/etc/logrotate.conf,默认转储所有日志,且不保留历史日志
      • 手动强制执行,一天只能运行一次,多次运行无效

    三、问题

    1. 默认情况下,不是在凌晨去切换的,现在需要把切换日志的时间设置在凌晨0点执行
      • 把文件 /etc/cron.daily/logrotate 移动到一个新的目录,然后在/etc/crontab 中添加如下代码
        0 0 * * * root /etc/logrotate.d/flume
        

    四、关于copytruncate

    1. copytruncate拷贝截断
      • 把数据拷贝到新建的文件中(copy)
      • 把当前文件清空(truncate)
    2. 给程序发信号重新打log文件
      sharedscripts
      postrotate
      /bin/kill -HUP `cat /var/run/<application>d.pid 2> /dev/null` 2> /dev/null || true
      endscript
      
      • postrotate表示志轮转执行
      • sharedscripts表示所有日志共享脚本轮转完后再执行脚本,默认情况每个脚本轮转完都执行

    相关文章

      网友评论

          本文标题:[Linux-Tool] logrotate

          本文链接:https://www.haomeiwen.com/subject/gwewdctx.html