Linux Labs

Пакеты, службы, журналы / Ступень 12 из 13

Ротация и хранение журналов

Не запущена Запускается обычно ~20 с
Выйти из урока

Шаг 5 из 9 · теория · 5 мин

Кто пишет в новый лог

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

Программа, которая открывает лог на каждую запись — как echo … >> app.log, — после ротации пишет в новый app.log. Но писать она будет с правами своего пользователя: если строка create отдала новый файл root, программа получит Permission denied.

Программа, которая держит лог открытым, пишет через файловый дескриптор — в тот же файл и после переименования, то есть в app.log.1. Её просят открыть лог заново командой в блоке postrotate правила: у nginx в /etc/logrotate.d/nginx это invoke-rc.d nginx rotate. Так же держит файл tail -f: во время ротации он остаётся на переименованном файле, а tail -F следит за именем и переходит на новый. Директива copytruncate вместо переименования копирует лог и обнуляет его, но строки, записанные между копированием и обнулением, теряются.

Проверь себя 1 вопрос

Служба держит свой лог открытым всё время работы. Правило переименовало app.log в app.log.1 и создало новый app.log, а блока postrotate в нём нет. Куда пойдут следующие записи службы?

  • Служба пишет через открытый дескриптор, а он указывает на старый файл и после переименования. Новый app.log она откроет, только если её попросят — командой в postrotate.

  • Переименование файл не закрывает и не удаляет: запись через дескриптор продолжается без ошибок, просто в app.log.1.

Дескриптор связан с самим файлом, а не с его именем, поэтому служба пишет в переименованный app.log.1. Переоткрыть лог её просят командой в postrotate, как в правиле nginx.

Главное в шаге

  • Программа, открывающая лог на каждую запись, после ротации пишет в новый файл — с правами своего пользователя.
  • Программа с открытым файлом пишет в переименованный, её просят переоткрыть лог в postrotate.
  • copytruncate может потерять строки, записанные во время ротации.
Ubuntu 24.04
Загрузка…