2

можно ли настроить logrotate для создания olddir в день?

Я хотел бы получить тот же результат bash , как это:

user@blade1022m:~$ date "+%y%m%d"
120208

В /etc/logrotate.conf (псевдокод):

/home/mhd-01/logs/*.log {
  daily
  missingok
  rotate 62
  olddir /home/mhd-01/logs/archive/${`date "+%y%m%d"`}/
  postrotate
     /etc/init.d/apache2 restart
}

Спасибо всем!

1 ответ1

2

Это невозможно без взлома logrotate .

Тем не менее, вы можете «обмануть» и добиться того же эффекта, используя символическую ссылку и cron. В вашем logrotate.conf установите olddir в /home/mhd-01/logs/olddir/ и создайте ежедневный cronjob, который выполняет:

mkdir /home/mhd-01/logs/archive/$(date "+%y%m%d")
ln -sf /home/mhd-01/logs/archive/$(date "+%y%m%d") /home/mhd-01/logs/olddir/

Убедитесь, что этот новый cronjob запускается перед заданием logrotate - либо вставьте его в /etc/cron.daily/ с номером спереди (например, 01_linkrotate), либо установите для запуска в полночь (00:00)


Более грубый вариант этого решения без символических ссылок будет использовать cron для перемещения содержимого olddir в архив. Cronjob, работающий после logrotate или в конце дня (23:59), будет делать следующее:

mkdir /home/mhd-01/logs/archive/$(date "+%y%m%d")
mv /home/mhd-01/logs/olddir/* /home/mhd-01/logs/archive/$(date "+%y%m%d")/

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .