为什么日志轮换脚本中有 sleep

为什么日志轮换脚本中有 sleep

我对 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 秒的延迟允许这种情况发生。

相关内容