1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#!/bin/bash
#vi cutlog.sh 不错的切割脚本 其实s135.com的写得更加简单呢
##查找nginx进程
nginx_bin=`ps aux | grep nginx | grep root | grep -v 'grep nginx' | awk '{print $14}'`
if [ $nginx_bin == /usr/local/nginx/sbin/nginx ];then
##如果nginx进程在,就找到配置文件,读取accesslog路径
#ACCLOG=`cat /usr/local/nginx/conf/nginx.conf | grep  ' access_log' | awk '{print $2}'`
ACCLOG=`cat /usr/local/nginx/conf/hosts/1.conf | grep  'access_log' | awk '{print $2}' | cut  -d";" -f1`
##同上错误日志的路径  这两个是假设nginx配置文件只有一个的情况下的
ERRLOG=`cat /usr/local/nginx/conf/nginx.conf| grep  ^error  | awk '{print $2}'| cut  -d";" -f1`
## #查看是否有此文件
file  $ACCLOG  && file $ERRLOG
  if [ $? -eq 0 ];then
###重命名当前日志
mv $ACCLOG  $ACCLOG.`date -d "-1 day" +%F`
mv $ERRLOG $ERRLOG.`date -d "-1 day" +%F`
##创建空日志
touch $ACCLOG  ;touch $ERRLOG
##修改属主
chown www:www  $ACCLOG;chown www:www  $ERRLOG
# #判断进程,并重新加载(这里的kill -USR1会使nginx将新产生的日志写到刚创建的新日志里面。) 其它我喜欢用 /etc/init.d/nginx reload
#[ -f /usr/local/nginx/logs/nginx.pid ] && kill -USR1 `cat /usr/local/nginx/logs/nginx.pid`
/etc/init.d/nginx reload
#压缩日志
gzip $ACCLOG.`date -d "-1 day" +%F`
gzip $ERRLOG.`date -d "-1 day" +%F`
# #将10天前的老日志清理到其他地方,(你们如果想删除的可以自己改成删除)
mv  $ACCLOG.`date -d "-10 day" +%F`.gz  /data/history.nginx.log/
mv  $ERRLOG.`date -d "-10 day" +%F`.gz   /data/history.nginx.log/
  fi
fi
1
2
3
4
5
6
7
#!/bin/bash
# This script run at 00:00
# The Nginx logs path
logs_path="/usr/local/nginx/logs/"
mkdir -p ${logs_path}$(date -d "yesterday" +"%Y")/$(date -d "yesterday" +"%m")/
mv ${logs_path}access.log  ${logs_path}$(date -d "yesterday" +"%Y")/$(date -d "yesterday" +"%m")/access_$(date -d "yesterday" +"%Y%m%d").log
kill -USR1 `cat /usr/local/webserver/nginx/nginx.pid`