我对 nginx 日志轮换有一些问题 -nginx -s reopen
不重新打开日志文件,这就是我研究该主题的原因。
在几个地方,我找到了这个脚本:
$ mv access.log access.log.0
$ kill -USR1 `cat master.nginx.pid`
$ sleep 1
$ gzip access.log.0 # do something with access.log.0
我的问题是为什么杀死后有睡眠?这似乎没有必要,因为即使重新打开速度变慢,gzip 无论如何也无法将所有内容压缩 1 秒?
如果文件非常小,他们会这样做吗?所以不会丢失数据?
睡眠是为了让程序在 gzip 压缩它之前干净地关闭日志文件。
请记住,一旦打开文件,程序就会通过文件描述符写入文件,名称现在无关紧要。重命名文件只会影响目录中的条目。当您向程序发送信号以重新打开它的日志文件时,它将首先刷新缓冲区然后关闭文件最后重新打开它。1 秒的延迟允许这种情况发生。