logrotate cron не вращает определенные журналы
Я добавил два скрипта в каталог "logrotate.d" для ротации журналов приложений. Это конфиг для одного из них:
<myLogFilePath> {
compress
copytruncate
delaycompress
dateext
missingok
notifempty
daily
rotate 30
}
В каталоге "cron.daily" есть скрипт "logrotate" (который, кажется, выполняется ежедневно согласно журналам cron):
#!/bin/sh
echo "logrotate_test" >>/tmp/logrotate_test
#/usr/sbin/logrotate /etc/logrotate.conf >/dev/null 2>&1
/usr/sbin/logrotate -v /etc/logrotate.conf &>>/root/logrotate_error
EXITVALUE=$?
if [ $EXITVALUE != 0 ]; then
/usr/bin/logger -t logrotate "ALERT exited abnormally with [$EXITVALUE]"
fi
exit 0
Первое эхо заявление работает.
Но я нахожу, что одни только журналы моего приложения не вращаются, тогда как другие журналы, такие как httpd, вращаются **
** И я также не вижу никакого вывода в упомянутом файле "logrotate_error" (имеет разрешение на запись для всех пользователей).
Однако системный журнал говорит: "logrotate: ALERT аварийно завершился с [1]"
Но когда я запускаю тот же "logrotate" в сценарии "cron.daily" вручную, кажется, что все работает нормально.
Почему он не вращается во время ежедневного расписания cron? Я что-то здесь не так делаю?
Было бы здорово, если бы я получил столь необходимую помощь.
ОБНОВЛЕНО: Похоже, это из-за selinux - файлы журналов в моем домашнем каталоге пользователя имеют ограничения, наложенные selinux, и когда запускается скрипт logrotate:
SELinux is preventing /usr/sbin/logrotate from getattr access on the file /home/user/logs/application.log
1 ответ
SELinux ограничивал доступ к logrotate в файлах журналов в каталогах, которые не имеют требуемого типа контекста файла SELinux. Каталог "/var/log" имеет контекст файла "var_log_t", и logrotate смог сделать все необходимое. Таким образом, решение было установить это в моих файлах журнала приложения и его родительском каталоге:
semanage fcontext -a -t var_log_t <directory/logfile>
restorecon -v <directory/logfile>