Nginx日志分割与定时删除(可用于其他日志)

2017-09-06 11:12:18 查看 2944 回复 0

Nginx日志文件如何不定情清理,会变得越来越大,影响Nginx服务器的运行,下面就给大家介绍下Linux中清理Nginx日志的方法,一起来了解下吧。

ttttt

nginx日志文件需要手动分割

创建脚本文件clear_log.sh

文件路径/usr/local/nginx/clear_log.sh

vi clear_log.sh。输入如下内容

#!/bin/bash
cp /home/data/nginx/error.log /home/data/nginx/errorlog/error-$(date -d "yesterday" +"%Y%m%d").log
#先复制原来的错误日志文件,请根据自己实际的日志路径填写
cat /dev/null > /home/data/nginx/error.log
#清空错误日志文件
cp /home/data/nginx/access.log /home/data/nginx/log/access-$(date -d "yesterday" +"%Y%m%d").log
#先复制原来的正常访问日志
cat /dev/null > /home/data/nginx/access.log

创建dellog.sh文件

#!/bin/sh
find /home/data/nginx/log -mtime +30  -type f -name  '*.log'  | xargs rm -f 
find /home/data/nginx/errorlog -mtime +30  -type f -name  '*.log'  | xargs rm -f 

#定期删除30天前的日志文件

  启动linux下的计划任务,将刚才创建好的两个shell脚本加入此计划

  crontab -e,输入如下内容

  0 0 * * * /usr/nginx/clear_log.sh

  #每天0点执行/usr/nginx/clear_log.sh

  0 0 * * * /usr/nginx/dellog.sh

  #每天0点执行 /usr/nginx/dellog.sh

  保存后退出,输入命令crontab root就会看到/var/spool/cron/文件夹下看到相应的副本文件root。至此完成nginx日志按天拆分与定期清除。

  逻辑详解:比如现在是3月18日0点0分,系统会自动执行clear_log.sh与dellog.sh两个shell脚本。clear_log.sh会把3月17日的日志文件分别生成为access_20140317.log与error_20140318.log,然后把原来的access.log与error.log分别清空。dellog.sh则会自动判断该文件的创建时间,如果是十五天前的就会自动清除

两个命令合并在一起版本

vim /usr/local/cut_del_logs.sh

#!/bin/bash

#初始化

LOGS_PATH=/var/log/nginx

YESTERDAY=$(date -d "yesterday" +%Y%m%d)

#按天切割日志

mv ${LOGS_PATH}/ilanni.com.log ${LOGS_PATH}/ilanni.com_${YESTERDAY}.log

#向nginx主进程发送USR1信号,重新打开日志文件,否则会继续往mv后的文件写数据的。原因在于:linux系统中,内核是根据文件描述符来找文件的。如果不这样操作导致日志切割失败。

kill -USR1 `ps axu | grep "nginx: master process" | grep -v grep | awk '{print $2}'`

#删除7天前的日志

cd ${LOGS_PATH}

find . -mtime +7 -name "*20[1-9][3-9]*" | xargs rm -f

#或者

#find . -mtime +7 -name "ilanni.com_*" | xargs rm -f

exit 0

在切割nginx日志的功能中,我们要注意该shell脚本命名切割的日志是以切割时,是以前一天的时间就行命名该日志文件的。

所以我们在把该shell脚本放在crontab中执行时,建议在每天的0点0分执行。如下:

crontab -e

0 0 * * * root /bin/sh /usr/local/cut_del_logs.sh

 上面就是Linux清理Nginx日志的方法介绍了,因为Nginx日志没有自动清理的功能,一般采用切割日志的方法进行处理。