zoukankan      html  css  js  c++  java
  • nginx日志文件按天记录定时清理循环记录

    问题

    nginx日志默认记录在一个文件access.log中,时间长了会导致日志文件特别大,甚至磁盘占满。

    解决方案

    使用以下方法,将access.log文件每天一个,然后清过15天以前的文件。

    方法

    创建clearNginxLog.sh文件

    #!/bin/bash
    
    LOG_PATH="/data/nginx/log/"
    save_days=1
    YESTERDAY=$(date -d "yesterday" +%Y%m%d)
    echo "———————————————–"
    echo "运行时间:[$(date +"%Y-%m-%d %H:%M:%S")]"
    #删除指定日期以前的文件
    echo "删除[$save_days]天以前的日志文件"
    #find $LOG_PATH -mtime +$save_days -exec rm -rf {} ;
    find $LOG_PATH -mtime +$save_days -type f -name *.log | xargs rm -f
    
    # 循环文件重命名
    echo "循环文件重命名"
    #for f in $LOG_PATH*.log; do cp $f ${f%.html}.php; done
    for var in $LOG_PATH*.log; do mv "$var" "${var%.log}_$YESTERDAY.log"; done
    
    #向nginx主进程发送USR1信号,重新打开日志文件,否则会继续往mv后的文件写数据的。原因在于:linux系统中,内核是根据文件描述符来找文件的。如果不这样操作导致日志切割失败。
    echo "向nginx发送信号"
    kill -USR1 `ps axu | grep "nginx: master process" | grep -v grep | awk '{print $2}'`
    
    echo "清理完成"
    echo "———————————————–"
    

    将文件上传到服务器上,
    然后在crontab中添加任务
    crontab -e
    每天0点执行
    0 0 * * * /data/nginx/conf/clearNginxLog.sh >> /var/log/clearNginx.log 2>&1

    :q!退出
    :wq保存退出

    然后重启crontab服务
    root@castle:~# /etc/init.d/cron restart
    [ ok ] Restarting cron (via systemctl): cron.service.
    root@castle:~#

    作者:朱鹏飞 加我个人微信(zhupengfeivip)进入郑州IT微信交流群
    个人博客:https://zhupengfeivip.github.io/
    image.png
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

  • 相关阅读:
    jQuery 淡入淡出
    (Windows窗体)循环动态绑定根节点及子节点
    C# 语音读取
    js禁用&启用某个按钮
    AWS DescribeDBInstances API 无法查询到 DBInstanceArn 参数
    Python 设置S3文件属性中元数据的Content-Encoding值
    Pyhton 批量重命名 AWS S3 中的文件
    Python 控制(SSM)AWS Systems Manager
    Python 根据AWS EC2设置的标签获取正在运行的instancesId
    python 'wb' 模式写入文件怎么输出回车
  • 原文地址:https://www.cnblogs.com/zhupengfei/p/14787060.html
Copyright © 2011-2022 走看看