Судя по временным меткам в моих системах, logrotate выполняет ежедневную ротацию журналов, когда logrotate запускается cron. Однако, если я запускаю его раньше, он не поворачивает файлы. Как logrotate знает, следует ли их вращать или нет, ведет ли он историю или, возможно, использует временные метки?
Я считаю, что это содержимое файла состояния, который является моим делом /var/lib/logrotate.status. Каждый файл имеет одну строку, которая является датой его последнего поворота; Если вы запустите logrotate в такую дату, когда данный файл будет подлежать ротации, учитывая количество дней между текущей датой и датой в файле (1 для ежедневной, 7 для еженедельной и т. д.), файл будет повернут.
logrotate, похоже, не заботится, в какое время суток он запускается; даже если он обычно работает в 2355, если вы вместо этого запускаете его в 01:30, он все равно будет вращать файлы, отмеченные ежедневно и выполненные вчера; но сделав это, он поместил бы сегодняшнюю дату в файл состояния (против любых повернутых файлов), поэтому второй запуск в 2355 ничего не даст.
Хм .. Так что он вращается только если: текущая дата> дата в /var/lib/logrotate/status(как файл в моем случае).
Кайл Брандт
2
Я думаю, что он делает что-либо вообще, только если прошло 24 часа с момента его последнего запуска, что выясняется путем проверки mtime файла состояния. После того, как решено, что прошел целый день, и он может на законных основаниях делать что-либо, он принимает ЕЖЕДНЕВНЫЕ, ЕЖЕНЕДЕЛЬНЫЕ и т. Д. Решения на основе полей даты в файле.
MadHatter поддерживает Монику
4
Ну, похоже, использовать дату в этом файле. Я установил день один день назад в файле состояния и запустил его ... он повернулся ..
Кайл Брандт
Только что вернувшись и ткнув в мой логротейт, я думаю, что был неправ, а то, что вы пишете выше, правильно. Он решает, был ли он уже запущен сегодня, просматривая временную метку файла состояния; если это не так, он продолжает извлекать даты последнего вращения из файла состояния и действует соответственно. Я просто соврал, чтобы войти с помощью vi и коснуться -t, чтобы убедить его, что последний раз он запускался вчера в 2355, когда он вращал мои журналы Мунина. Запустив его снова, хотя прошло менее 24 часов, он повернул их и соответствующим образом обновил файл состояния.
MadHatter поддерживает Монику
Я обновил свой ответ до моего текущего понимания, учитывая набор тестов, которые я только что выполнил (разрезая мои журналы munin восемью путями с воскресенья, но кого это волнует!).
MadHatter поддерживает Монику
11
Со страницы руководства logrotate:
Обычно logrotate запускается как ежедневное задание cron. Он не будет изменять журнал более одного раза в день, если только критерий для этого журнала не основан на размере журнала, а logrotate запускается более одного раза в день или если не используется опция -f или -force.
/var/lib/logrotate/status
(как файл в моем случае).Со страницы руководства logrotate:
источник