#! /bin/bash
## 假设nginx的日志存放路径为/data/logs/
d=`date -d "-1 day" +%Y%m%d`
logdir="/data/logs"
nginx_pid="/usr/local/nginx/logs/nginx.pid"
cd $logdir
for log in `ls *.log`
do
mv $log $log-$d
done
/bin/kill -HUP `cat $nginx_pid`
[root@hanfeng vhost]# vim /usr/local/sbin/nginx_log_rotate.sh
#! /bin/bash
d=`date -d "-1 day" +%Y%m%d`
logdir="/tmp/"
nginx_pid="/usr/local/nginx/logs/nginx.pid"
cd $logdir
for log in `ls *.log`
do
mv $log $log-$d
done
/bin/kill -HUP `cat $nginx_pid`
date -d “-1 day” +%Y%m%d
// 生成昨天的日期,格式为年月日cat $nginx_pid
,而这个命令目的和nginx -s relo 是一样的ls *.log
//开始语句循环,看错有哪些 log后缀的文件cat $nginx_pid
// 重新加载,生成一个新的“nginx_pid=”/usr/local/nginx/logs/nginx.pid”[root@hanfeng vhost]# ls
aaa.com.conf test.com.conf
[root@hanfeng vhost]# for f in `ls `; do ls -l $f ; done
-rw-r--r--. 1 root root 140 1月 3 23:17 aaa.com.conf
-rw-r--r--. 1 root root 295 1月 4 22:07 test.com.conf
[root@hanfeng vhost]#
[root@hanfeng vhost]# sh -x /usr/local/sbin/nginx_log_rotate.sh
++ date -d '-1 day' +%Y%m%d
+ d=20180103
+ logdir=/tmp/
+ nginx_pid=/usr/local/nginx/logs/nginx.pid
+ cd /tmp/
++ ls test.com.log
+ for log in '`ls *.log`'
+ mv test.com.log test.com.log-20180103
++ cat /usr/local/nginx/logs/nginx.pid
+ /bin/kill -HUP 1612
[root@hanfeng vhost]#
[root@hanfeng vhost]# ls /tmp/
mysql.sock pear php-fcgi.sock test.com.log test.com.log-20180103
[root@hanfeng vhost]#
[root@hanfeng vhost]# find /tmp/ -name *.log-* -type f -mtime +30 |xargs rm
[root@hanfeng vhost]# crontab -e
0 0 * * * /bin/bash /usr/local/sbin/nginx_log_rotate.sh
date -d “-1 day” +%Y%m%d
”不明白意思[root@hanfneg ~]# date -d “-1 day” +%Y%m%d
20180103
[root@hanfeng vhost]# date
2018年 01月 04日 星期四 23:27:23 CST
cat $nginx_pid
”这个命令也将没有办法继续执行cat $nginx_pid
” z这条命令的意思就是重新加载一次nginx服务cat $nginx_pid
”这条命令的目的是因为切割日志以后 “mv $log $log-$d ” 会将日志移动位置,如果不使用这条命令重新加载一次nginx服务、重新生成一次日志文件,那么将会导致服务出错cat $nginx_pid
”能准确的执行,需要确定nginx的PID所在[root@hanfeng ~]# ls /usr/local/nginx/logs/
access.log error.log nginx_error.log nginx.pid