shell切割nginx日志

用linux自带的计划任务切割nginx日志,每天0点执行

 

#!/bin/bash
#GuoYabin

nginxpid=`/bin/ps aux|grep nginx |awk /master/'{print $2}'`
accesslog=`/usr/sbin/lsof -p $nginxpid |awk /access.log/'{print $9}'`
LOGS_PATH=`/usr/bin/dirname $accesslog`
YESTERDAY=$(date -d "yesterday" +%Y%m%d)

#按天切割日志
mv ${LOGS_PATH}/access.log ${LOGS_PATH}/access_${YESTERDAY}.log
mv ${LOGS_PATH}/error.log ${LOGS_PATH}/error_${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 +30 -name "*20[1-9][0-9]*" | xargs rm -f
#或者
#find . -mtime +7 -name "ilanni.com_*" | xargs rm -f
exit 0

  

posted @ 2017-09-08 14:38  一起走过的路  阅读(267)  评论(0编辑  收藏  举报