• [Linux运维 -- webserver]nginx的日志轮转


    nginx的日志轮转

    今天突然发现nginx所在的机器出现了问题,报警磁盘空间快满了。 立马看看。

    $df -h
    Filesystem            Size  Used Avail Use% Mounted on
    /dev/sda2              50G  50G   50G   100% /
    /dev/sda1             247M   23M  212M  10% /boot
    tmpfs                  48G  368K   48G   1% /dev/shm
    /dev/sda5             1.1T  491M  1.1T   1% /home
    

    发现根目录满了,查询一下是哪个文件比较大,耗空间

    $sudo find / -size +512M | xargs ls -lh
    -rw-r--r-- 1 root root 3.5G Aug  8 15:16 /usr/local/openresty/nginx/logs/access.log
    -rw-r--r-- 1 root root 3.0G Aug  8 15:16 /usr/local/openresty/nginx/logs/error.log
    

    发现nginx的请求和错误日志文件已经非常大了。

    [xxxxx:/usr/local/openresty/nginx/logs]
    $ls
    access.log  error.log  nginx.pid
    

    到日志目录下,发现只有一个文件,原来nginx的日志文件没有做轮转导致的。

    使用linux自带的logrotate日志轮询工具来对nginx的log做处理。

    具体的格式如下:

    $ cat /etc/logrotate.d/nginx 
    /usr/local/openresty/nginx/logs/*.log { 
    daily 
    missingok 
    rotate 20 
    notifempty 
    sharedscripts 
    postrotate 
    sudo kill -USR1 `cat /usr/local/openresty/nginx/logs/nginx.pid` > /dev/null 
    endscript 
    }
    

    上面各行的意思为:

    • /usr/local/openresty/nginx/logs/*.log 为nginx的日志路径
    • daily 每天轮转一次
    • missingok 即使日志不存在也继续执行
    • rotate 20 保留20个备份
    • notifempty 如果空文件的话不转存
    • sharedscripts 在所有的日志文件都轮转完毕后统一执行一次脚本。如果没有配置这条指令,那么每个日志文件轮转完毕后都会执行一次脚本。
    • postrotate 轮转结束的动作
    • endscript 用于结束postrotate部分的脚本

    脚本部分

    sudo kill -USR1 `cat /usr/local/openresty/nginx/logs/nginx.pid` > /dev/null 
    

    让nginx进程平滑加载

    参考:

    (1) http://os.51cto.com/art/200912/167478_all.htm
    (2) http://huoding.com/2013/04/21/246
    (3) http://blog.csdn.net/superhosts/article/details/8741227

  • 相关阅读:
    联表查询更新
    SQLServer 中多行数据合并成一行数据(一个字段)
    换行和回车的区别
    SQL语句中使用回车换行符
    g2o使用总结
    求导总结
    ubuntu14.04 升级gcc
    如何入门SLAM
    imu和canmera标定
    使用velodyne16线激光雷达跑loam-velodyne------包括激光雷达和imu的标定
  • 原文地址:https://www.cnblogs.com/zk47/p/4755743.html
Copyright © 2020-2023  润新知