Ротация файлового журнала: конфиг logrotate и переоткрытие
Настраиваем logrotate для текстового журнала и проверяем, что после ротации приложение пишет в новый файл.
- Старый файлlogrotate переносит журнал по правилу
- ПереоткрытиеПриложение переключается на новый файл
- Новые событияПроверяем запись и хранение старых журналов
Текстовый журнал растёт, пока не занимает весь раздел. Logrotate умеет переименовать старый файл, создать новый и удалить лишние копии. Но приложение может продолжить писать в прежний открытый файл. Поэтому проверим не только конфигурацию ротации, но и то, как программа переоткрывает журнал.
Пример настройки logrotate
# /etc/logrotate.d/journal-demo
/var/log/journal-demo/app.log {
daily
rotate 7
compress
delaycompress
missingok
notifempty
create 0640 appuser adm
}Имена пользователя и группы здесь условные: сначала проверьте реальные учётные записи и требования приложения. Блок задаёт ежедневный критерий ротации и сохранение семи архивов. Фактическое выполнение зависит от запуска самого logrotate. Отложенное сжатие оставляет последний архив несжатым до следующего цикла, но не заставляет приложение закрыть старый дескриптор. Это отдельная обязанность интеграции.
Сначала безопасный разбор
sudo logrotate --debug /etc/logrotate.confРежим отладки показывает предполагаемые действия без изменения журналов и файла состояния. Проверьте, что путь распознан, каталог существует, а тот же файл не описан повторно в другом включённом правиле. Проверка полного конфига полезнее изолированного фрагмента: общие параметры и порядок включения способны влиять на итоговое поведение.
Если приложение поддерживает документированную команду переоткрытия, её добавляют в подходящий обработчик после ротации. Нельзя механически копировать сигнал от другой службы: смысл сигнала зависит от программы. Вариант copytruncate иногда используют для приложений без переоткрытия, однако между копированием и обнулением возможна потеря записей. Его выбирают только при осознанном принятии этого ограничения.
Проверка записи после ротации
На тестовой среде создайте несколько записей, выполните согласованную пробную ротацию и запишите ещё одно сообщение. Найдите его в новом app.log. Затем проверьте владельца, доступность журнала службе и появление архивов. Принудительный запуск на рабочем сервере меняет реальные файлы, поэтому его не используют вместо предварительного разбора и понимания политики хранения.
Убедитесь, что планировщик действительно вызывает logrotate, и следите за датой последней ротации и размером активного файла. Семь архивов — не обязательно семь календарных дней, если запуски пропускались. Выбирайте хранение под нужную глубину журналов и доступный диск, а не только под удобное число в конфигурации.
