• 博客园logo
  • 会员
  • 周边
  • 新闻
  • 博问
  • 闪存
  • 众包
  • 赞助商
  • YouClaw
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录

韩工

  • 博客园
  • 管理

公告

View Post

Linux日志自动分割服务Logrotate

服务名: Logrotate

CentOS下安装方式: yum -y install logrotate

Ubuntu下安装方式: apt-get -y install logrotate

Logrotate 在服务器中的文件位置

# rpm -ql logrotate

  • /etc/cron.daily/logrotate
  • /etc/logrotate.conf
  • /etc/logrotate.d
  • /usr/sbin/logrotate
  • /usr/share/doc/logrotate-3.7.8
  • /usr/share/doc/logrotate-3.7.8/CHANGES
  • /usr/share/doc/logrotate-3.7.8/COPYING
  • /usr/share/man/man5/logrotate.conf.5.gz
  • /usr/share/man/man8/logrotate.8.gz

 

配置文件: /etc/logrotate.conf,/etc/logrotate.d/是用于存储其他配置文件的目录。该目录里的所有文件都会被主动的读入 /etc/logrotate.conf中执行。

# vi /etc/logrotate.d/nginx

/var/log/nginx/*log {    #为nginx日志的存储目录,可以根据实际情况进行修改

  •     daily                 #日志文件将按天轮循
  •     rotate 10          #一次存储10个日志文件。对于第11个日志文件,时间最久的那个日志文件将被删除
  •     missingok        #在日志轮循期间,任何错误将被忽略,例如“文件无法找到”之类的错误
  •     notifempty       #如果是空文件的话,不进行转储
  •     dateext            #定义日志文件后缀是日期格式,也就是切割后文件是:xxx.log-20220101.gz这样的格式 
  •     size 10M         #当日志文件到达10M时才转储
  •     compress        #在轮循任务完成后,已轮循的归档将使用gzip进行压缩
  •     sharedscripts   #运行postrotate脚本,作用是在所有日志都轮转后统一执行一次脚本。如果没有配置这个,那么每个日志轮转后都会执行一次脚本
  •     postrotate        #在所有其它指令完成后,postrotate和endscript里面指定的命令将被执行。在这种情况下,rsyslogd进程将立即再次读取其配置并继续运行。
  •           /bin/kill -USR1 $(cat /var/run/nginx.pid 2>/dev/null) 2>/dev/null || :
  •     endscript

}

 

  • daily:日志文件将按天轮循
  • weekly:日志文件将按周轮循
  • monthly:日志文件将按月轮循
  • nocompress:不需要压缩时,用这个参数
  • copytruncate:用于还在打开中的日志文件,把当前日志备份并截断
  • nocopytruncate:备份日志文件但是不截断
  • create mode owner group:转储文件,使用指定的文件模式创建新的日志文件
  • nocreate:不建立新的日志文件
  • delaycompress 和 compress 一起使用时,转储的日志文件到下一次转储时才压缩
  • nodelaycompress 覆盖 delaycompress 选项,转储同时压缩。
  • size size 当日志文件到达指定的大小时才转储,Size 可以指定 bytes (缺省)以及KB (sizek)或者MB (sizem).
  • dateext:定义日志文件后缀是日期格式,也就是切割后文件是:xxx.log-20220101.gz这样的格式。如果该参数被注释掉,切割出来是按数字递增,即前面说的 xxx.log-1这种格式
  • delaycompress:总是与compress选项一起用,delaycompress选项指示logrotate不要将最近的归档压缩,压缩将在下一次轮循周期进行。这在你或任何软件仍然需要读取最新归档时很有用
  • create 640 nginx adm:以指定的权限和用书属性,创建全新的日志文件,同时logrotate也会重命名原始日志文件。
  • rotate count 指定日志文件删除之前转储的次数,0 指没有备份,5 指保留5 个备份

 

logrotate的切割时间默认是在 /etc/anacrontab 里面配置的:

# cat /etc/anacrontab

  • # /etc/anacrontab: configuration file for anacron
  • # See anacron(8) and anacrontab(5) for details.
  • SHELL=/bin/sh
  • PATH=/sbin:/bin:/usr/sbin:/usr/bin
  • MAILTO=root
  • # the maximal random delay added to the base delay of the jobs
  • RANDOM_DELAY=45
  • # the jobs will be started during the following hours only
  • START_HOURS_RANGE=3-22
  • #period in days   delay in minutes   job-identifier   command
  • 1     5     cron.daily             nice run-parts /etc/cron.daily
  • 7     25   cron.weekly          nice run-parts /etc/cron.weekly
  • @monthly 45 cron.monthly        nice run-parts /etc/cron.monthly

 

#向nginx主进程发送USR1信号,重新打开日志文件

kill -USR1 `ps axu | grep "nginx: master process" | grep -v grep | awk '{print $2}'`

服务重启

# service rsyslog restart

 

实验

配置文件自定义

/var/log/test/test.log {   

  •     rotate 2                   # 如果参数配置为0,则转储后的日志文件将不会备份,注意:配置文件里不能出现注释汉字,请删除此内容
  •     missingok          
  •     notifempty         
  •     compress          
  •     sharedscripts
  •     dateext
  •     size 10M
  •     dateformat -%Y%m%d
  •     postrotate         
  •             true
  •     endscript

}

# logrotate -f /etc/logrotate.d/test   强制执行日志文件分割与转储操作

 

总结

1)系统默认使用cron执行logrotate,加载默认配置文件/etc/logrotate.conf,默认情况下每周转储,保留4份历史日志

2)手动执行logrotate,不会加载配置文件/etc/logrotate.conf,默认转储大于1M的日志,且不保留历史日志

3)手动强制执行logrotate -f,不会加载配置文件/etc/logrotate.conf,默认转储所有日志,且不保留历史日志

4)配置完后,需要重启rsyslog服务才能生效

征途漫漫,惟有奋斗!

posted on 2021-12-25 16:16  韩工-Hill  阅读(234)  评论(0)    收藏  举报

刷新页面返回顶部
 
博客园  ©  2004-2026
浙公网安备 33010602011771号 浙ICP备2021040463号-3