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

Как logrotate обрабатывает параллелизм?

В случае, если logrotate выполняется одновременно с обновлением файла журнала, что произойдет? Будет ли новый журнал преобразован в архивный файл журнала? Или он останется в текущем лог-файле?

Во время ротации сообщения журнала могут попадать в старый или новый файл, но детерминированным образом. Logrotate делает примерно следующее для каждого файла журнала:

  1. Переименуйте журнал в имя архива
  2. Сообщите приложению, что нужно повторно открыть журналы
  3. При желании сжать файл журнала

Если сообщения регистрируются между 1 и 2, они попадают в переименованный журнал, потому что переименование не влияет на дескрипторы открытых файлов (поэтому сжатие происходит только после приложения повторно открывают свои журналы). Сообщения, зарегистрированные после 2, попадут в новый журнал.

Вот отрывок из моей конфигурации logrotate, которая делает то, что я описал для журналов nginx:

/var/log/nginx/*.log {
    compress
    delaycompress
    postrotate
        [ ! -f /run/nginx.pid ] || kill -USR1 `cat /run/nginx.pid`
    endscript
}