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
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

  • 相关阅读:
    Spring Security demo
    applicationContext-XXX.xml和XXX-servlet.xml的区别
    搜索意图识别浅析
    如何配置使用Dnsmasq
    机器学习十大算法之EM算法
    如何利用OpenSSL生成证书
    11月13日晚直播预告 | 关于数据可视化,网易大数据资深专家将在这里告诉你
    漫话中文分词
    10分钟快速构建汽车零售看板
    聊一聊整车厂的那些事——售后配件业务
  • 原文地址:https://www.cnblogs.com/zhupengfei/p/14787060.html
Copyright © 2011-2022 走看看