目录

nginx log 清理

目录

之前设置了 UptimeRobot 来监控服务器的运行情况,但是这样会在 nginx 下面留下大量的轮询 log 记录,想到之前设置的 crontab 会在每天 00:00 的时候把 log 文件从 /var/log/nginx 移动到 /var/log/nginx/20060102,于是就在原本的脚本基础上添加了一行 sed '/UptimeRobot/d' $log_file_name -i。之前尝试过修改 nginx 让它不记录 UptimeRobot 的流量,但是这样要么需要插件,要么需要重新编译,但是我不是很想动它,最后觉得这个方式还算能接受。

最后,放上脚本。

首先要清理一下之前的文件:

log_file_list=`ls -l /var/log/nginx`;
for log_file_folder in $log_file_list;
do
    log_folder="/var/log/nginx/$log_file_folder";
    if [ -d $log_folder ];
    then
        for log_file in `ls -l $log_folder`;
        do
            log_file_name="$log_folder/$log_file"
            if [ -f $log_file_name ];
            then
                sed '/UptimeRobot/d' $log_file_name -i
            fi
        done
    fi
done

然后是修改之后的 crontab:

#!/bin/bash
#1.设置日志文件存放目录,假设你的nginx的日志存在这个目录里
logs_path="/var/log/nginx/"

#2.设置pid文件,这个根据你自己的环境,找到nginx.pid所在目录
pid_path="/usr/local/openresty/nginx/logs/nginx.pid"

#3.创建分割存储的日期文件目录
datetime=`date -d "yesterday" +"%Y%m%d"`;
new_log_path=$logs_path$datetime
mkdir -p $new_log_path

#4.按照日期移动所有该目录下的日志文件
log_file_list=`ls -l $logs_path`;
for log_file in $log_file_list;
do
    log_file_name=$logs_path$log_file;
    if [ -f $log_file_name ];
    then
        sed '/UptimeRobot/d' $log_file_name -i
        mv $log_file_name $new_log_path;
    fi
done

#5.向nginx主进程发信号重新打开日志
kill -USR1 `cat ${pid_path}