nginx 日志 logrotate配置如下:
/var/log/nginx/*.log {
daily
missingok
rotate 20
compress
delaycompress
notifempty
create 664 appops netease
sharedscripts
postrotate
if [ -f /var/run/nginx.pid ]; then
kill -USR1 `cat /var/run/nginx.pid`
fi
endscript
}
sharedscripts的作用是什么?
在前面nginx的例子里声明日志文件的时候用了星号通配符,也就是说这里可能涉及多个日志文件,比如:access.log和error.log。说到这里大家或许就明白了,sharedscripts的作用是在所有的日志文件都轮转完毕后统一执行一次脚本。如果没有配置这条指令,那么每个日志文件轮转完毕后都会执行一次脚本。这里说的脚本指的就是sharedscripts和endscript中间的配置内容。
在这里logrotate采用的是create方式转存文件的,这种转存思路是重命名源文件,然后创建新的日志文件,这个时候日志还是向旧的日志文件里面输入日志(虽然重命名了,但是并不影响。)。
这个时候需要向nginx发送USR1信号以通知nginx重新打开新的日志文件,postrotate中的内容就是处理这件事情,nginx收到信号之后才会打开新的日志文件,向其中输入日志内容。
logrotate的create方式可以参考logrotate机制和原理这篇博客