Как работает 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
говорит службе снова открыть свой файл журнала.