nginx的日志文件没有办法按天切割
网上的其他办法:mv文件,然后再重启nginx生成空的日志文件
但这样,还需要重启nginx,总是感觉有点太过周张
新的办法:cp文件,利用/dev/null清空日志文件
1:cp日志文件
2:cat /dev/null > 日志文件
具体代码:
----------
/data/log/:切割日志存放目录
----------
/data/nginx/logs/:为nginx原始日志存放的目录(请根据自己情况修改)
nginx_log_1.log:为需要切割的日志文件(请根据自己情况修改)
----------
1: 每次操作会生成操作日志 /data/log/op-2018_11_23.log
2:切割日志,会按天存放在:/data/log/2018/11/23/
#Create by skyhh 2018-11-23
#变量
#1:操作日志 /data/log/op-2018_11_23.log
fileDate=$(date +"%Y_%m_%d")
logfilePath="/data/log/op-"$fileDate".log"
#2:切割存放目录 /data/log/2018/11/23/
datePath=$(date +"%Y/%m/%d")
fullPath="/data/log/"$datePath
echo $(date +"%Y-%m-%d %H:%M:%S")" 开始切割" >> $logfilePath
#3:判断日志
if [ ! -d $fullPath ];then
mkdir -p $fullPath
else
#日志
echo $(date +"%Y-%m-%d %H:%M:%S")" 文件夹已经存在" >> $logfilePath
fi
#开始文件切割
#1
filename="nginx_log_1.log"
cp /data/nginx/logs/$filename $fullPath"/"$filename
echo $(date +"%Y-%m-%d %H:%M:%S")" 切割"$filename >> $logfilePath
cat /dev/null > /data/nginx/logs/$filename
echo $(date +"%Y-%m-%d %H:%M:%S")" 完成"$filename >> $logfilePath
#有几个需要切割的文件,就写几个
#2
filename="nginx_log_2.log"
cp /data/nginx/logs/$filename $fullPath"/"$filename
echo $(date +"%Y-%m-%d %H:%M:%S")" 切割"$filename >> $logfilePath
cat /dev/null > /data/nginx/logs/$filename
echo $(date +"%Y-%m-%d %H:%M:%S")" 完成"$filename >> $logfilePath
#3
filename="nginx_log_3.log"
cp /data/nginx/logs/$filename $fullPath"/"$filename
echo $(date +"%Y-%m-%d %H:%M:%S")" 切割"$filename >> $logfilePath
cat /dev/null > /data/nginx/logs/$filename
echo $(date +"%Y-%m-%d %H:%M:%S")" 完成"$filename >> $logfilePath
#4
filename="nginx_log_4.log"
cp /data/nginx/logs/$filename $fullPath"/"$filename
echo $(date +"%Y-%m-%d %H:%M:%S")" 切割"$filename >> $logfilePath
cat /dev/null > /data/nginx/logs/$filename
echo $(date +"%Y-%m-%d %H:%M:%S")" 完成"$filename >> $logfilePath
#5
filename="nginx_log_5.log"
cp /data/nginx/logs/$filename $fullPath"/"$filename
echo $(date +"%Y-%m-%d %H:%M:%S")" 切割"$filename >> $logfilePath
cat /dev/null > /data/nginx/logs/$filename
echo $(date +"%Y-%m-%d %H:%M:%S")" 完成"$filename >> $logfilePath
#6
filename="nginx_log_6.log"
cp /data/nginx/logs/$filename $fullPath"/"$filename
echo $(date +"%Y-%m-%d %H:%M:%S")" 切割"$filename >> $logfilePath
cat /dev/null > /data/nginx/logs/$filename
echo $(date +"%Y-%m-%d %H:%M:%S")" 完成"$filename >> $logfilePath
ps:还可以优化,将文件写入一个数组,然后循环
最后:
crontab -e
0 0 * * * /data/log/log.sh
crontab -l