zoukankan      html  css  js  c++  java
  • logrotate日志分割

    一. 以docker运行的mongo日志为例

    /etc/logrotate.d中编写mongo文件如下, 实际执行时不能写注释内容

    /mnt/elements/log/mongodb/mongod.log {
    su root docker  #因为mongod.log上级目录mongodb权限为777,这里需要指定mongod.log的所属用户
    daily    #指定转储周期为每天
    rotate 15  #保留15个的文件数
    create
    dateext   #使用当期日期作为命名格式
    missingok  #如果日志丢失,不报错继续滚动下一个日志
    notifempty #当日志文件为空时,不进行轮转
    }

    如果等不及cron自动执行日志轮转,想手动强制切割日志,需要加-f参数;不过正式执行前最好通过Debug选项来验证一下(-d参数),这对调试也很重要
    # /usr/sbin/logrotate -f /etc/logrotate.d/mongo
    # /usr/sbin/logrotate -d -f /etc/logrotate.d/mongo

    mongo经测试不能使用这种方式,虽然生产了新的mongo日志文件,但是不会自动向里面写内容,需要用下面定时任务的方式

    00 00 * * * /usr/local/bin/mongo --eval "new Mongo('localhost').getDB('admin').runCommand({logRotate:1});"

    参考:https://blog.csdn.net/qq_31183727/article/details/90236112

     二. docker中nginx日志分割

    /etc/logrotate.d/nginx内容如下

    /mnt/elements/log/nginx/access.log {
      su root root 
      daily   
      rotate 7  
      create 0644 root root
      dateext
      missingok  
      notifempty 
      sharedscripts
      postrotate
          docker exec elements_nginx_1 bash -c "if [ -f /run/nginx.pid ]; then kill -USR1 `docker exec elements_nginx_1 cat /run/nginx.pid`; echo 日志打包完毕; fi"
      endscript
    }

    每日轮询默认是在每天早上6:25执行的

    https://www.cnblogs.com/276815076/p/7053640.html

    如果想自定义轮询时间 crontab -e中写入

    0 0 * * * /usr/sbin/logrotate /etc/logrotate.d/nginx -fv  >/tmp/logro.log 2>&1

    kill -USR1的含义不是终止nginx的进程,而是传递给它信号重新生成日志

    kill -USR1 $(/bin/cat /var/run/nginx.pid

    kill -USR1的含义:
    1)nginx 的主进程收到USR1信号,会重新打开日志文件(以nginx配置文件中的日志名称命名,就是配置文件中access_log项所设置的值,如果文件不存在,会自动创建一个新的文件xxx.log)。
    2)然后把日志文件的拥有者改为“工作进程(worker进程)”,目的是让worker进程就具备了对日志文件的读写权限(master和worker通常以不同用户运行,所以需要改变拥有者)
    3)nginx主进程会关闭重名的日志文件(也就是刚才使用mv命令重命名成xxx.log-$date.log的文件),并通知工作进程使用新打开的日志文件(刚才主进程打开的文件xxx.log)。具体实现上更细化点就是,主进程把USR1信号发给worker,worker接到这个信号后,会重新打开日志文件(也就是配置文件中约定的xxx.log)
     
     
    另外一种写法如下,参考:https://www.cnblogs.com/zhangeamon/p/7092702.html
    docker inspect -f '{{ .State.Pid }}' nginx | xargs kill -USR1
    
    
    https://www.it610.com/article/1290705252365967360.htm
    https://blog.csdn.net/wu__peng/article/details/90754671
    努力生活,融于自然
  • 相关阅读:
    gvim在windows下的一些小技巧
    解决eclipse在ubuntu下无法找到jdk方法
    ubuntu 12.04 下安装wireshark
    使用坚果云同步数据
    Windows WMIC命令详解 (Windows Management Instrumentation Commandline)
    ubuntu 12.04 配置指南
    CHROME自定义样式扩展 —— STYLISH
    地漏
    卫生间装修,想要坐便改成蹲便,地面需要加高多少?
    不锈钢橱柜
  • 原文地址:https://www.cnblogs.com/regit/p/15701694.html
Copyright © 2011-2022 走看看