Назад | Перейти на главную страницу

Почему в скрипте ротации логов есть сон

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