nginx日志分割

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#设置日志文件存放目录
logs_path="/data1/openresty/logs/"
#设置pid文件
pid_path="/data1/openresty/nginx/run/nginx.pid"
#重命名日志文件
rm -rf ${logs_path}access_log.$(date +%Y-%m-%d-%H) && mv ${logs_path}access.log ${logs_path}access_log.$(date -d '-1 hour' +%Y-%m-%d-%H)
rm -rf ${logs_path}error_log.$(date +%Y-%m-%d-%H) && mv ${logs_path}error.log ${logs_path}error_log.$(date -d '-1 hour' +%Y-%m-%d-%H)
#向nginx主进程发信号重新打开日志
kill -USR1 `cat ${pid_path}`
ln -sf ${logs_path}access.log ${logs_path}access_log.$(date +%Y-%m-%d-%H)
ln -sf ${logs_path}error.log ${logs_path}error_log.$(date +%Y-%m-%d-%H)

在重命名后,nginx还没reopen之前,如何保障日志不丢失呢?

日志文件mv改名后,只是文件名字改变了,nginx打开的文件句柄是没有变化的,所以在reopen会继续往原来的access.log.xxxx-xx-xx-x文件中写日志,nginx接收到USR1信号后进行reopen操作,重新打开日志access.log,此后的日志会写到新打开的access.log中