Судя по отметкам времени в моих системах, logrotate выполняет ежедневную ротацию журнала, когда logrotate запускается cron. Однако, если я запускаю его раньше, файлы не меняются. Как logrotate узнает, следует ли их вращать или нет, хранит ли он историю или, возможно, использует временные метки?
Я считаю, что это содержимое файла состояния, в моем случае это /var/lib/logrotate.status
. В каждом файле есть одна строка, в которой указывается дата последнего поворота; если вы запустите logrotate в такую дату, когда данный файл подлежит ротации, учитывая количество дней между текущей датой и датой в файле (1 для ежедневного, 7 для еженедельного и т. д.), файл будет повернут.
logrotate, похоже, не волнует, в какое время дня он запускается; даже если он обычно запускается на 2355, если вы запускаете его на 01:30, он все равно будет вращать файлы, помеченные ежедневно и выполненные последними вчера; но, сделав это, он поместит сегодняшнюю дату в файл состояния (против любых повернутых файлов), поэтому второй запуск на 2355 ничего не даст.
На странице руководства logrotate:
Обычно logrotate запускается как ежедневное задание cron. Он не будет изменять журнал более одного раза в день, если критерий для этого журнала не основан на размере журнала и logrotate запускается чаще одного раза в день, или если не используется параметр -f или -force.