Как работает 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

2 ответа

Решение

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

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

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

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

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

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

Другие вопросы по тегам