Вопрос или проблема
Logrotate не выполняется автоматически, но работает с logrotate -d и logrotate -f без ошибок. Однако он не запускается автоматически каждый день. Ниже приведен вывод logrotate -d.
logrotate -d /etc/logrotate.d/lumen
чтение конфигурационного файла /etc/logrotate.d/lumen
Выделение хеш-таблицы для файла состояния, размер 15360 B
Обработка 1 логов
Паттерн вращения: /var/www/*/storage/logs/*.log после 1 дня (365 вращений)
пустые файлы логов вращаются, старые логи удаляются
переключение euid на 48 и egid на 48
рассмотрение лога /var/www/testdir/storage/logs/laravel.log
лог требует вращения
вращение лога /var/www/testdir/storage/logs/laravel.log, log->rotateCount составляет 365
Преобразовано ' -%Y%m%d' -> '-%Y%m%d'
дата суффикс '-20190425'
шаблон глоба '-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'
сжатие лога с помощью: /bin/gzip
контекст fscreate установлен на unconfined_u:object_r:httpd_user_rw_content_t:s0
переименование /var/www/testdir/storage/logs/laravel.log в /var/www/testdir/storage/logs/laravel.log-20190425
переключение euid на 0 и egid на 0
Вы должны проверить, установлен ли Cron / запланирована ли задача Cron
Я не могу не заметить, что вы вращаете логи, находящиеся под /var/www
, и logrotate
выдает это сообщение, связанное с SELinux:
контекст fscreate установлен на unconfined_u:object_r:httpd_user_rw_content_t:s0
Когда вы запускаете logrotate
вручную из вашей несвязанной сессии с привилегиями администратора, он, безусловно, может установить тип SELinux на httpd_user_rw_content_t
.
Но logrotate
, запущенный cron
в более ограниченном контексте, может не иметь возможности сделать это, если вы не предприняли шаги для разрешения этого.
По крайней мере, в RHEL 7.9, с установленным пакетом selinux-policy-doc
, man logrotate_selinux
не перечисляет httpd_user_rw_content_t
как относящийся к logrotate.
Если у вас есть законное веб-приложение, которое требует, чтобы вращаемые логи были доступны для записи через httpd
, и они, по-видимому, также находятся под корневым каталогом веб-сервера, вы, безусловно, можете это сделать… но я не могу не считать такую конфигурацию несколько рискованной, в духе “приходите, взламывайте меня и удаляйте мои логи”.
Ответ или решение
Конечно, вы столкнулись с проблемой, когда Logrotate работает при запуске вручную, однако не выполняется автоматически. Давайте разберемся, в чем может быть причина этой проблемы и как ее решить.
Факт:
Logrotate эффективно выполняет свои функции при запуске с параметром -d
или -f
, что демонстрирует, что сама конфигурация Logrotate не содержит ошибок и данные успешно обрабатываются. Ручной запуск показывает, что программное обеспечение установлено и, по сути, работает корректно.
Ожидание:
Мы ожидаем, что Logrotate будет выполнять операции по ротации файлов автоматически через Cron, что обычно используется для периодического запуска задач на сервере.
Реальность:
-
Проблема с Cron:
- Убедитесь, что Cron установлен и работает должным образом. Чтобы это проверить, выполните команду:
service cron status
илиsystemctl status cron
. Если Cron не работает, запустите его с помощьюservice cron start
илиsystemctl start cron
. - Проверьте, есть ли задача для Logrotate. Выполните команду
crontab -l
для просмотра списка запланированных задач. По умолчанию, Logrotate должен вызываться через файл настройки в каталоге/etc/cron.daily
.
- Убедитесь, что Cron установлен и работает должным образом. Чтобы это проверить, выполните команду:
-
Проблема c SELinux:
- SELinux может ограничивать выполнение Logrotate при автоматическом запуске через Cron. Это может быть связано с контекстом
httpd_user_rw_content_t
, который Logrotate пытается установить. - Рассмотрите возможность изменения контекста файлов через
chcon
или модификацию политики SELinux для разрешения необходимых операций. Опцией может быть временная деактивация SELinux для тестирования с помощьюsetenforce 0
, но помните, что это временное решение и в долгосрочной перспективе требует корректировки политики безопасности.
- SELinux может ограничивать выполнение Logrotate при автоматическом запуске через Cron. Это может быть связано с контекстом
Эмоция:
Успешная автоматизация всего процесса управления логами поможет вам сократить ручные операции и минимизировать риски потери данных.
Стратегия:
Определите корень проблемы, проводя корректное тестирование через ручные операции и перенастройку соответствующих сервисов. Убедитесь в том, что ваши политики безопасности соответствуют требованиям и логически связаны с движением логов внутри системы.
Конечный результат:
Вы сможете автоматизировать ротацию логов Logrotate и обеспечить надежное обслуживание системы, минимизируя вмешательство человека и повышая устойчивость.
Следуя этим шагам, вы сможете устранить возникшую проблему и наладить корректную работу Logrotate в автоматическом режиме.