• 简述nginx日志管理切割日志(亲测可行)


     日志切割

    nginx的日志文件没有rotate功能 编写每天生成一个日志,我们可以写一个nginx日志切割脚本来自动切割日志文件

    第一步就是重命名日志文件 (不用担心重命名后nginx找不到日志文件而丢失日志。在你未 重新打开原名字的日志文件前,nginx还是会向你重命名的文件写日志,Linux是靠文件描述 符而不是文件名定位文件 )

    第二步向nginx主进程发送USR1信号

     nginx主进程接到信号后会从配置文件中读取日志文件名称
    重新打开日志文件 (以配置文件中的日志名称命名) ,并以工作进程的用户作为日志文件 的所有者 重新打开日志文件后,nginx主进程会关闭重名的日志文件并通知工作进程使用新打开 的日志文件
    工作进程立刻打开新的日志文件并关闭重名名的日志文件 然后你就可以处理旧的日志文件了。[或者重启nginx服务]

    nginx日志按每分钟自动切割脚本如下 :

    新建shell脚本:

    vi   /opt/nginx/nginx_log.sh
    #!/bin/bash
    #设置日志文件存放目录
    #LOG_HOME="/home/wwwlogs/"
     LOG_HOME="/usr/local/nginx/logs"
    #备分文件名称
    LOG_PATH_BAK="$(date -d yesterday +%Y%m%d%H%M)".access.log
    #重命名日志文件
    mv ${LOG_HOME}/access.log ${LOG_HOME}/${LOG_PATH_BAK}
    #向nginx主进程发信号重新打开日志
    kill -USR1 `cat /usr/local/nginx/logs/nginx.pid`

    创建crontab设置作业

    设置日志文件存放目录crontab -e

    */1 * * * *  sh /opt/nginx/nginx_log.sh

     

    自动删除7天前的指定日志文件

    # touch auto-del-7-day-ago-log.sh
    # chmod +x auto-del-7-day-ago-log.sh
    # vim auto-del-7-day-ago-log.sh
      find /www/cookie.com/log.cookie.com/ -mtime +7 -name "push*.log" -exec rm -rf {} \;
     
    # crontab -e
     10 0 * * * /opt/sh/auto-del-7-day-ago-log.sh > /dev/null 2>&1

    find /www/cookie.com/log.cookie.com/ -mtime +7 -name "push*.log" -exec rm -rf {} \;

    #/www/cookie.com/log.cookie.com/目录下

    #-mtime +7 7天前的文件

    #-name "push*.log" 文件名称匹配push*.log

    # -exec rm -rf 强制删除,包含目录

     10 0 * * * /opt/sh/auto-del-7-day-ago-log.sh > /dev/null 2>&1
    
    #每天凌晨0点10分执行

    参考:https://blog.csdn.net/Cookie_1030/article/details/81737336

    超过90天的日志文件 删除

    00 03 * * * find /home/connect/nginx/logs/ -type f -mtime +90 -delete
    #切割日志 
             if ($time_iso8601 ~ '(\d{4}-\d{2}-\d{2})') {
                   set $tttt $1;
              }
             access_log  /home/wwwlogs/access-$tttt.log ;

    =========下面 记录我出现的问题:==========

    在介绍问题之前,介绍一个命名,时刻查看当前正在执行的定时任务

    tail -f /var/log/cron

    问题1.反引号问题,导致 kill 关闭掉进程时出错

    错误写法

    kill -USR1 cat `/usr/local/nginx/logs/nginx.pid`

    正确写法

    kill -USR1 `cat /usr/local/nginx/logs/nginx.pid`

    问题2:权限问题

    大家都知道,普通用户在重启nginx服务的时候,需要使用root超级用户权限

    sudo service nginx restart

    所以定时任务,需要切换到root用户使用root权限去执行定时任务

    [root@vagrant-centos7 logs]# crontab -l
    * * */1 * *  sh /usr/local/nginx/logs/nginx_log.sh  #一天生成一个日志文件

    添加定时任务后需要重启crond 服务

    [root@vagrant-centos7 logs]# service crond restart
    Redirecting to /bin/systemctl restart crond.service
    每分钟产生日志文件
    这个是每分钟产生定时日志文件
  • 相关阅读:
    MD代码块指定语言类型
    spring通过bean名称,方法名,反射调用服务。
    h5魔塔开坑记
    意识流CSP2021游记
    Android开发byte version = 0x80错误: 不兼容的类型: 从int转换到byte可能会有损失
    Installed Build Tools revision 31.0.0 is corrupted. Remove and install again using the SDK Manager解决方法
    Android开发androidstudio调试smali代码
    Android开发修改手机ro.debuggable=1便于调试应用程序
    window环境下载Android系统源代码的方法
    android开发jni开发遍历文件夹下的文件以及目录
  • 原文地址:https://www.cnblogs.com/lxwphp/p/15452921.html
Copyright © 2020-2023  润新知