У меня проблемы с ротацией логов 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 секунду позволяет этому произойти.