Назад | Перейти на главную страницу

logrotate расширенная дата в ежедневных ротациях

Я установил файл конфигурации logrotate следующим образом:

/var/log/tomcat/catalina.out{
copytruncate
daily
dateext
rotate 10
missingok
notifempty
}

И в моем файле настроек / sysconfig / cron я установил DAILY_TIME="00:00" Он вращает журналы, но если в журнале есть дата catalina.out-20150415 он содержит информацию журнала с даты 20150414, это на день раньше.

Следует ли мне изменить дату в файле / sysconfig / cron или, может быть, я смогу добиться этого с помощью параметра prerotate / endcript?

Насколько мне известно, DAILY_TIME работает с 15-минутными перерывами, и я хотел бы иметь как можно более точные ежедневные журналы, содержащие информацию только за один день, насколько это возможно. Что я получаю сейчас, но дата в имени файлов не соответствует содержимому в них.

Примечание: я нахожусь под SLES, где ежедневные задания cron работают немного иначе, чем другие дистрибутивы.

Я бы не стал играть с / sysconfig / cron, кроме как установить ежедневные задания cron в полночь, и предпочел бы вместо этого postrotate.

Предположим, что сегодня 17.04.2015, это содержимое вашего каталога после ротации, но до запуска скрипта postrotate:

catalina.out-20150414
catalina.out-20150415
catalina.out-20150417
catalina.out

Обратите внимание, что catalina.out-20150416 отсутствует как 1) последний файл журнала, созданный ротацией, называется catalina.out-20150417 и 2) журнал, который был создан вчера, был переименован в catalina.out-20150415 чтобы отразить его содержание.

Этот сценарий позволяет нам сделать «слепое переименование» сегодняшнего журнала с датой вчера, например:

...
postrotate
    mv "catalina.out-$(date +"%Y%m%d")" "catalina.out-$(date --date="yesterday" +"%Y%m%d")" > /dev/null 2>&1 || true
endscript
...

В случае отсутствия файлов журнала mv выдаст сообщение об ошибке, которое будет перенаправлено на /dev/null а положительное возвращаемое значение обеспечивается || true