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

Ежедневная ошибка logrotate при создании уникального временного файла: в доступе отказано

У меня есть коробка CentOS 6.7, которая по какой-то причине не может ежедневно менять журналы. Я получаю письмо, подобное этому, каждый день в / var / mail / root:

To: root@server.nl
Content-Type: text/plain; charset="ANSI_X3.4-1968"
Subject: Anacron job 'cron.daily' on server.nl
Message-Id: <20160309024202.4847824B4A@server.nl>
Date: Wed,  9 Mar 2016 03:42:02 +0100 (CET)

/etc/cron.daily/logrotate:

error: error creating unique temp file: Permission denied

Бег logrotate -vf /etc/logrotate.conf ротация журналов должным образом без ошибок и предупреждений. SELinux включен, поэтому я подозревал, что это может быть причиной ошибки отказа в разрешении, но /var/log/audit/audit.log не было заявок ни на что за последние несколько недель.

Я не уверен, как устранить причину сбоя logrotate ночью, когда он работает нормально днем, если я запускаю его вручную.

Дополнение 10 марта: благодаря Иэну мне удалось получить вывод журнала того, что (ana) cron делает ночью, в конце /tmp/logrotate.out следующие строки:

@rotating pattern: /var/log/btmp  monthly (1 rotations)
empty log files are rotated, old logs are removed
considering log /var/log/btmp
  log does not need rotating
set default create context
error: error creating unique temp file: Permission denied

Это было не то, чего я ожидал, поскольку это не ошибка, связанная с журналами приложений Rails, которые я пытался устранить. Не сосредотачиваясь на самом сообщении об ошибке (которое дало лишь пару обращений в Google на корейском и русском языках), а на той реальной проблеме, с которой я столкнулся, я обнаружил задание logrotate cron не вращает определенные журналы что очень похоже на проблему, которую я пытаюсь решить (мои журналы nginx вращаются, они пропускают журналы Rails). Так что, в конце концов, это может быть связано с SELinux, даже если оно не отображается в audit.log. Я пробую опубликованное там решение.

Вам следует добавить -s опция logrotate, чтобы указать путь к временному файлу (доступному для записи).

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

В моем скрипте эта строка находится в /etc/cron.daily/logrotate

 /usr/sbin/logrotate /etc/logrotate.conf

Я бы поменял это на

 /usr/sbin/logrotate -v /etc/logrotate.conf >>/tmp/logrotate.out 2>&1