Я установил файл конфигурации 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