我对 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
我的问题是为什么 kill 之后会有 sleep?这似乎没有必要,因为即使重新打开速度很慢,gzip 也无法在 1 秒钟内压缩所有内容?
如果文件很小,他们是否会这样做,以免丢失数据?
答案1
睡眠是为了让程序在 gzip 压缩日志文件之前干净地关闭它。
请记住,一旦打开文件,程序就会通过文件描述符写入文件,名称现在无关紧要。重命名文件只会影响目录中的条目。当您向程序发送信号以重新打开其日志文件时,它将首先刷新缓冲区,然后关闭文件并最终重新打开它。1 秒的延迟允许这种情况发生。