У меня есть коробка 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