it-swarm-ru.tech

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

У меня есть следующая новая конфигурация 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.

60
Rich

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

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

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

68
EightBitTony

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

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

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

61
Tony Sweeney

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

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

Видеть man logrotate за дополнительной информацией.

5
emerino

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

logrotate -vdf /etc/logrotate.conf

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

log does not need rotating
1
helvete