按日期截断分割nginx日志的脚本
时间:2014-12-14 22:18 来源:linux.it.net.cn 作者:IT
由于公司网站很多,要是手动做nginx日志切割就会很繁杂,不如弄些shell脚本实现半自动处理。
首先,统一设置各站点的日志文件格式
# vi domain.sh
#!/bin/sh
sed -i '/access_log/d' /usr/local/nginx/vhost/*.conf
#### change path to /usr/local/nginx/vhost and use the command to get the DOMAIN_LIST :
### ls -lh *.conf |awk '{print $9}'|sed 's/$/ \/' > domain.txt ####
DOMAIN_LIST=(
bbs.elecfans.com.conf
cdnimg.xianbey.com.conf
c.elecfans.com.conf
......
common.qbaobei.com.conf
elecfans.com.conf
)
DOMAIN_ALL_LEN=${#DOMAIN_LIST}
i=0
while [ $i -lt $DOMAIN_ALL_LEN ]
do
sed -i "/server_name/ a access_log logs/access.${DOMAIN_LIST[$i]}.log main;" /usr/local/nginx/vhost/${DOMAIN_LIST[$i]}
let i++
done
接着测试下nginx的配置有没错误
# /etc/init.d/nginx test
## 如果没有错误就reload下nginx,有错那就检查配置吧 ##
# /etc/init.d/nginx reload
按日期轮循切割nginx日志
[root@]# vi Cut_nginx_error_log.sh
#!/bin/sh
## Cut Nginx Error Log ##
LOGS_PATH=/usr/local/nginx/logs
YESTERDAY=$(date -d "yesterday" +%Y-%m-%d)
mv ${LOGS_PATH}/error.log ${LOGS_PATH}/error_${YESTERDAY}.log
kill -USR1 $(cat /usr/local/nginx/logs/nginx.pid)
[root@]# vi Cut_nginx_log.sh
#!/bin/sh
## Cut Nginx Log ##
### use the follow command to get th ACCESS_LOG_LIST:
### sed 's/conf/&.log/' domain.txt > log.txt
### sed 's/^/access.&/' log.txt >> ng_log.txt ###
LOGS_PATH=/usr/local/nginx/logs
YESTERDAY=`date -d "yesterday" +%Y-%m-%d`
ACCESS_LOG_LIST=(
access.log
access.bbs.elecfans.com.conf.log
access.cdnimg.xianbey.com.conf.log
......
access.c.elecfans.com.conf.log
access.common.qbaobei.com.conf.log
access.elecfans.com.conf.log
)
ACCESS_LOG_ALL_LEN=${#ACCESS_LOG_LIST}
i=0
while [ $i -lt $ACCESS_LOG_ALL_LEN ]
do
mv ${LOGS_PATH}/${ACCESS_LOG_LIST[$i]} ${LOGS_PATH}/${ACCESS_LOG_LIST[$i]}.${YESTERDAY}.log
let i++
done
kill -USR1 `cat /usr/local/nginx/logs/nginx.pid`
删除日志
[root@]# vi Del_nginx_log.sh
#!/bin/sh
#Delete Nginx Log
LOGS_PATH=/usr/local/nginx/logs
YESTERDAY=$(date -d "-3day" +%Y-%m-%d)
rm -rf ${LOGS_PATH}/access*.conf.log.${YESTERDAY}.log
rm -rf ${LOGS_PATH}/error_${YESTERDAY}.log
设置crontab定时任务
[root@]# crontab -e
00 00 * * * /bin/bash /usr/local/nginx/sbin/Cut_nginx_log.sh
00 00 * * * /bin/bash /usr/local/nginx/sbin/Cut_nginx_error_log.sh
00 18 * * * /bin/bash /usr/local/nginx/sbin/Del_nginx_log.sh
如此便可
PS:有不当之处望请各位友友指点
(责任编辑:IT)
由于公司网站很多,要是手动做nginx日志切割就会很繁杂,不如弄些shell脚本实现半自动处理。 首先,统一设置各站点的日志文件格式 # vi domain.sh #!/bin/sh sed -i '/access_log/d' /usr/local/nginx/vhost/*.conf #### change path to /usr/local/nginx/vhost and use the command to get the DOMAIN_LIST : ### ls -lh *.conf |awk '{print $9}'|sed 's/$/ \/' > domain.txt #### DOMAIN_LIST=( bbs.elecfans.com.conf cdnimg.xianbey.com.conf c.elecfans.com.conf ...... common.qbaobei.com.conf elecfans.com.conf ) DOMAIN_ALL_LEN=${#DOMAIN_LIST} i=0 while [ $i -lt $DOMAIN_ALL_LEN ] do sed -i "/server_name/ a access_log logs/access.${DOMAIN_LIST[$i]}.log main;" /usr/local/nginx/vhost/${DOMAIN_LIST[$i]} let i++ done 接着测试下nginx的配置有没错误 # /etc/init.d/nginx test ## 如果没有错误就reload下nginx,有错那就检查配置吧 ## # /etc/init.d/nginx reload 按日期轮循切割nginx日志 [root@]# vi Cut_nginx_error_log.sh #!/bin/sh ## Cut Nginx Error Log ## LOGS_PATH=/usr/local/nginx/logs YESTERDAY=$(date -d "yesterday" +%Y-%m-%d) mv ${LOGS_PATH}/error.log ${LOGS_PATH}/error_${YESTERDAY}.log kill -USR1 $(cat /usr/local/nginx/logs/nginx.pid)
[root@]# vi Cut_nginx_log.sh #!/bin/sh ## Cut Nginx Log ## ### use the follow command to get th ACCESS_LOG_LIST: ### sed 's/conf/&.log/' domain.txt > log.txt ### sed 's/^/access.&/' log.txt >> ng_log.txt ### LOGS_PATH=/usr/local/nginx/logs YESTERDAY=`date -d "yesterday" +%Y-%m-%d` ACCESS_LOG_LIST=( access.log access.bbs.elecfans.com.conf.log access.cdnimg.xianbey.com.conf.log ...... access.c.elecfans.com.conf.log access.common.qbaobei.com.conf.log access.elecfans.com.conf.log ) ACCESS_LOG_ALL_LEN=${#ACCESS_LOG_LIST} i=0 while [ $i -lt $ACCESS_LOG_ALL_LEN ] do mv ${LOGS_PATH}/${ACCESS_LOG_LIST[$i]} ${LOGS_PATH}/${ACCESS_LOG_LIST[$i]}.${YESTERDAY}.log let i++ done kill -USR1 `cat /usr/local/nginx/logs/nginx.pid` 删除日志 [root@]# vi Del_nginx_log.sh #!/bin/sh #Delete Nginx Log LOGS_PATH=/usr/local/nginx/logs YESTERDAY=$(date -d "-3day" +%Y-%m-%d) rm -rf ${LOGS_PATH}/access*.conf.log.${YESTERDAY}.log rm -rf ${LOGS_PATH}/error_${YESTERDAY}.log 设置crontab定时任务 [root@]# crontab -e 00 00 * * * /bin/bash /usr/local/nginx/sbin/Cut_nginx_log.sh 00 00 * * * /bin/bash /usr/local/nginx/sbin/Cut_nginx_error_log.sh 00 18 * * * /bin/bash /usr/local/nginx/sbin/Del_nginx_log.sh 如此便可
PS:有不当之处望请各位友友指点 |