Logrotate: "журнал не потребує обертання", чому?


57

У мене є така нова конфігурація логротату:

/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

Швидше за все, файл журналу віком менше доби і / або був повернутий протягом останньої доби і логротат пам'ятає історію.

Якщо ви додасте -fце, ви змусите обертання, якщо ви дійсно хочете (хоча не на 100% впевнені, як це взаємодіє -d).

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


4
У FreeBSD це /var/run/logrotate.status
kaleissin

Також перевірте можливе використання аргументу -s у виклику щодо місцезнаходження файла статусу
JGurtz

2
-d+ -fробить звіт logrotate "потребує повороту" для всіх файлів, навіть тих, що не відповідають
Fluffy

Щоб додати до цього, достатньо відредагувати дату у файлі стану, щоб бути старшою за політику обертання, щоб переконатись, logrotateщо потрібно повернути журнал, коли він запускається знову.
Centimane

У CentOS я змінив /var/lib/logrotate.status, щоб працювати логротатом. Як вказує EightBitTony, щоденний логротат запам'ятає історію. Якщо файл в історії вже є датою, логротат не обертає файл.
Позначте

58

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

Коли він згодом запускається наступного дня, він бачить, що журнал старий день, і обертає його, як очікувалося. Якщо ви не хочете чекати, відредагуйте файл статусу логротату та змініть дату статусу для свого журналу назад до попереднього дня.

Якщо ви запускаєте логротат вручну, він буде працювати, як очікувалося


5

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

Щоб вирішити цю проблему, вам потрібно використовувати dateformatзамість dateextзі значенням , як: %Y%m%d%s.

Див. Для man logrotateотримання додаткової інформації.


1

Остерігайтеся цього, бігаючи

logrotate -vdf /etc/logrotate.conf

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

log does not need rotating

1
Я не можу відтворити це на Ubuntu (16.04 та 17.04). Якщо використовується "/var/lib/logrotate.status", ви повинні використовувати інший дистрибутив. Ubuntu журналює "/ var / lib / logrotate / status".
Philipp Claßen

2
@Philipp Claßen: Ви праві, це (файл статусу, розміщеного на /var/lib/logrotate.status) спостерігається під час налагодження конфігурації Logrotate 3.10 на Alpine linux 3.5 у контейнері докера. Але у визначенні питання немає прапора Ubuntu, чи не так?
helvete

1
Так, це добре. Я б лише зазначив, що Ubuntu настільки популярний. Я припускаю, що багато людей читають це питання, тому що хочуть виправити свій сервер, який сьогодні часто працює з Ubuntu.
Philipp Claßen

1
Гаразд, саме так. Для завершення можу додати, що розташування файлу статусу в дистрибутиві Centos 7 знаходиться на/var/lib/logrotate/logrotate.status
helvete
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.