Logrotate: «журнал не нуждается во вращении», почему?

57

У меня есть следующая новая конфигурация logrotate:

/var/log/nexus/nexus.log {
    rotate 7
    missingok
    compress
    delaycompress
    copytruncate
    daily
}

Когда я бегу logrotate -d nexus, я получаю следующее:

reading config file nexus
reading config info for /var/log/nexus/nexus.log

Handling 1 logs

rotating pattern: /var/log/nexus/nexus.log  after 1 days (7 rotations)
empty log files are rotated, old logs are removed
considering log /var/log/nexus/nexus.log
  log does not need rotating

Моя папка / var / log / nexus / содержит следующее:

nexus.log
oldlogs.tar.gz

Почему LogRotate не вращает файл nexus.log? Я ожидал, что файл nexus.log будет обрезан и будет создан новый файл, например, nexus.log-201106241000.

Богатый
источник
Кроме того, помните, что когда вы используете опцию -d, ЭТО НЕ ВРАЩАЕТ ЛОГИ. Он показывает вам, что он будет делать без опции, как план игры. У меня были серьезные головные боли, когда я думал, что вижу их вращающиеся, а потом они все еще были там.
Максвелл Фландерс

Ответы:

64

Скорее всего, файл журнала менее одного дня и / или был повернут в течение последнего дня, и logrotate запоминает историю.

Если вы добавите -fэто, оно будет вызывать вращение, если вы действительно этого хотите (хотя не уверены на 100%, как это взаимодействует -d).

Вы можете посмотреть историю, местоположение зависит от вашего дистрибутива, но может быть /var/lib/logrotate/status. Этот файл показывает, когда журналы последний раз вращались.

EightBitTony
источник
4
В FreeBSD это /var/run/logrotate.status
калейссин
Также проверьте возможное использование аргумента -s в вызове для местоположения файла статуса
JGurtz
2
-d+ -fзаставляет отчет logrotate «вращаться» для всех файлов, даже для тех, которые не совпадают
Fluffy
Чтобы добавить к этому, достаточно изменить дату в файле состояния, чтобы она была старше политики ротации, чтобы убедить logrotateее в необходимости поворота журнала при повторном запуске.
Сентиман
В CentOS я изменил /var/lib/logrotate.status, чтобы заставить работать logrotate. Как указано EightBitTony, ежедневный логротейт запоминает историю. Если файл не находится в истории уже с датой в прошлом, logrotate не будет вращать файл.
Mark
58

Когда вы в первый раз запускаете logrotate с новой конфигурацией журнала, он не знает, когда произошла последняя ротация журнала, поэтому он просто записывает строку состояния в /var/lib/logrotate/statusтом смысле, что он был запущен сегодня.

Когда он впоследствии запускается на следующий день, он видит, что журнал имеет дневной возраст, и поворачивает его, как и ожидалось. Если вы не хотите ждать, отредактируйте файл состояния logrotate и перенесите дату статуса вашего журнала на предыдущий день.

Когда вы запускаете logrotate вручную, он будет работать как положено

Тони Суини
источник
5

Иногда, даже если вы запускаете logrotate вручную, это не сработает, если вы делаете это в тот же день, и dateextесли значение по умолчанию не включает в себя секунды (например -%Y%m%d). Даже если вы изменяете файл состояния logrotate или когда используете директиву размера (например size 200M). По крайней мере в CentOS 6, logrotate не сможет повернуть ваш файл журнала, потому что он уже существует.

Чтобы решить эту проблему, вам нужно использовать dateformatвместо dateextсо значением , как: %Y%m%d%s.

Смотрите man logrotateдля получения дополнительной информации.

emerino
источник
1

Остерегайтесь этого, запустив

logrotate -vdf /etc/logrotate.conf

событие, хотя только смоделированное будет зарегистрировано, /var/lib/logrotate.status и последующие запуски logrotate ответят с упомянутым

log does not need rotating
Helvete
источник
1
Я не могу воспроизвести это на Ubuntu (16.04 и 17.04). Если используется «/var/lib/logrotate.status», вы должны использовать другой дистрибутив. Ubuntu регистрируется в "/ var / lib / logrotate / status".
Филипп Классен
2
@Philipp Claßen: Вы правы, это (файл статуса размещен в /var/lib/logrotate.status) наблюдался при отладке конфигурации Logrotate 3.10 в Alpine linux 3.5 в док-контейнере. Но в определении вопроса нет флага Ubuntu?
Helvete
1
Да, все в порядке. Я бы просто упомянул об этом, потому что Ubuntu очень популярен. Я предполагаю, что многие люди читают этот вопрос, потому что они хотят исправить свой сервер, который сегодня часто работает с Ubuntu.
Филипп Классен
1
ОК, верно. Для полноты я могу добавить, что locationo файла состояния в дистрибутиве Centos 7 находится на/var/lib/logrotate/logrotate.status
helvete