У меня есть следующая новая конфигурация 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.
Ответы:
Скорее всего, файл журнала менее одного дня и / или был повернут в течение последнего дня, и logrotate запоминает историю.
Если вы добавите
-f
это, оно будет вызывать вращение, если вы действительно этого хотите (хотя не уверены на 100%, как это взаимодействует-d
).Вы можете посмотреть историю, местоположение зависит от вашего дистрибутива, но может быть
/var/lib/logrotate/status
. Этот файл показывает, когда журналы последний раз вращались.источник
-d
+-f
заставляет отчет logrotate «вращаться» для всех файлов, даже для тех, которые не совпадаютlogrotate
ее в необходимости поворота журнала при повторном запуске.Когда вы в первый раз запускаете logrotate с новой конфигурацией журнала, он не знает, когда произошла последняя ротация журнала, поэтому он просто записывает строку состояния в
/var/lib/logrotate/status
том смысле, что он был запущен сегодня.Когда он впоследствии запускается на следующий день, он видит, что журнал имеет дневной возраст, и поворачивает его, как и ожидалось. Если вы не хотите ждать, отредактируйте файл состояния logrotate и перенесите дату статуса вашего журнала на предыдущий день.
Когда вы запускаете logrotate вручную, он будет работать как положено
источник
Иногда, даже если вы запускаете logrotate вручную, это не сработает, если вы делаете это в тот же день, и
dateext
если значение по умолчанию не включает в себя секунды (например-%Y%m%d
). Даже если вы изменяете файл состояния logrotate или когда используете директиву размера (напримерsize 200M
). По крайней мере в CentOS 6, logrotate не сможет повернуть ваш файл журнала, потому что он уже существует.Чтобы решить эту проблему, вам нужно использовать
dateformat
вместоdateext
со значением , как:%Y%m%d%s
.Смотрите
man logrotate
для получения дополнительной информации.источник
Остерегайтесь этого, запустив
событие, хотя только смоделированное будет зарегистрировано,
/var/lib/logrotate.status
и последующие запуски logrotate ответят с упомянутымисточник
/var/lib/logrotate.status
) наблюдался при отладке конфигурации Logrotate 3.10 в Alpine linux 3.5 в док-контейнере. Но в определении вопроса нет флага Ubuntu?/var/lib/logrotate/logrotate.status