Как работает logrotate?

Как работает logrotate?

Я пытаюсь отслеживать файл журнала, который часто ротируется с помощью logrotate, но не могу сделать это правильно. Может ли кто-нибудь объяснить, как на самом деле работает logrotate?

Переименовывается ли файл и создается ли новый файл?

или файл копируется с новым именем, а текущий файл очищается?

Перед вращением:

131887 -rw-r--r-- 1 root root  11385 Sep 25 03:40 /var/log/sas.log

После вращения:

131887 -rw-r--r-- 1 root root  0 Sep 25 04:40 /var/log/sas.log

131911 -rw-r--r-- 1 root root   11385 Sep  25 04:40 /var/log/sas.log.1

решение1

Если опция truncate включена в файле конфигурации, то файл не будет перемещен - его содержимое будет только скопировано в другой файл, который будет создан заново, а текущий файл будет очищен, поэтому идентификатор inode не изменится. Фактически файл никогда не изменяется.

решение2

При ротации текущий файл журнала перемещается и, возможно, сжимается, если это указано. Затем он создается заново. [ищу источник, отличный от моего опыта]

Это проблема, если запущена служба, которая открыла файл журнала во время ротации. Файл будет отсоединен, но дисковое пространство на самом деле не освободится, поскольку файл все еще открыт.

Вот почему сервисы часто устанавливают более сложный скрипт logrotate, обрабатывающий ротацию. В качестве примера рассмотрим /etc/logrotate.d/nginxопределение поведения ротации для nginxвеб-сервера:

[....]
postrotate
    invoke-rc.d nginx rotate >/dev/null 2>&1
endscript

Блок postrotateвыполняется после создания нового файла журнала. Он вызывает скрипт службы nginx, rotateсообщая службеповторно открыть файл журнала.

Связанный контент