Nginx容器挂载日志卷的日志切割: logrotate

logrotate是一个日志文件管理工具, 用来把旧文件轮转、压缩、删除, 并且创建新的日志文件.

1). 功能: 配合crontab控制启动, 按配置定义的分割时间和保留分割文件数量来控制日志生成和删除.

2). 语法: logrotate [参数] <路径/配置文件> -d, --debug 调试模式,输出调度结果,并不执行. -f, --force 强制模式,对所有相差文件进行rotate.

3). 实例:

  mkdir -p /data/nginx/logs/old_log

  vim /data/nginx/nginx-logrotate.conf

/data/nginx/logs/*.log {
  #不压缩切割后的日志文件
  nocompress
  #按周来分割
  weekly
  #允许分割打开中的日志文件
  copytruncate
  #分割后的日志文件属性
  create 644 root root
  #空日志不处理
  notifempty
  #保存200个副本,即分割出来的旧日志文件数量
  rotate 200
  #指定分割的日志文件保存位置
  olddir /data/nginx/logs/old_log
  #忽略所有错误
  missingok
  #使用日期重命名分割后的文件
  dateext
  #分割后,执行的shell命令
  postrotate
    # 因为是容器挂载日志卷,则需要进入容器操作nginx进程,让它重新打开切割后生成的新日志文件
    # kill -USR1 $(cat /var/run/nginx.pid), 获取nignx的pid值
    # -USR2是指重加载nginx日志, 参考"nginx的HUB信令方式"
    docker exec kg-nginx bash -c "if [ -f /var/run/nginx.pid ]; then kill -USR1 $(cat /var/run/nginx.pid); service nginx status; fi"
  endscript
}
​
# 配置文件中常用的一些选项:
#  compress:通过gzip 压缩转储旧的日志
#  nocompress:不需要压缩时,用这个参数
#  daily:指定转储周期为每天
#  weekly:指定转储周期为每周
#  monthly:指定转储周期为每月
#  copytruncate:用于还在打开中的日志文件,把当前日志备份并截断
#  nocopytruncate:备份日志文件但是不截断
#  create mode owner group:使用指定的文件模式创建新的日志文件
#  nocreate:不建立新的日志文件
#  ifempty:即使是空文件也转储,这个是 logrotate 的缺省选项
#  notifempty:如果是空文件的话,不转储
#  rotate count:指定日志文件删除之前转储的次数,0指没有备份,7指保留7个备份
#  olddir directory:转储后的日志文件放入指定的目录,必须和当前日志文件在同一个文件系统
#  noolddir:转储后的日志文件和当前日志文件放在同一个目录下
#  missingok: 在日志轮循期间,任何错误将被忽略,例如“文件无法找到”之类的错误
#  dateext: 使用日期作为日志轮替文件的后缀,如secure-20130605
#  prerotate  ... endscript:在转储以前需要执行的命令可以放入这个对,这两个关键字必须单独成行
#  postrotate ... endscript:在转储以后需要执行的命令可以放入这个对,这两个关键字必须单独成行 
#  sharedscripts:所有的日志文件都轮转完毕后统一执行一次脚本
#  size size:当日志文件到达指定的大小时才转储,Size 可以指定 bytes (缺省)以及KB (sizek)或者MB

4). 检测配置文件语法 && 强制执行分割

  logrotate -d nginx-logrotate.conf

  logrotate -f nginx-logrotate.conf

5). 写入计划任务: 每天23点59分执行, 二选一即可

  echo "59 23 * * * root /usr/sbin/logrotate -f /data/nginx/nginx-logrotate.conf" >>/etc/crontab

  echo "59 23 * * * logrotate -f /data/nginx/nginx-logrotate.conf" >>/var/spool/cron/root

posted @ 2023-05-11 13:46  天海沙  阅读(356)  评论(0编辑  收藏  举报