Назад | Перейти на главную страницу

Задание 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 и скриптом when logrotate:

SELinux is preventing /usr/sbin/logrotate from getattr access on the file /home/user/logs/application.log

SELinux ограничивал доступ для logrotate к файлам журналов в каталогах, не имеющих требуемого типа контекста файла SELinux. В каталоге "/ var / log" "var_log_t" контекст файла, и logrotate смог сделать необходимое. Итак, решение заключалось в том, чтобы установить это в моих файлах журнала приложения и его родительском каталоге:

semanage fcontext -a -t var_log_t <directory/logfile>
restorecon -v <directory/logfile>