Как заставить (или обойти) logrotate переместить старые журналы в olddir на другой физический диск?

Я хочу logrotate для копирования и усечения файла журнала и использования olddir на другом физическом диске. Согласно руководству, olddir не может быть на другом физическом диске, потому что по умолчанию logrotate должен переименовывать только исходный файл журнала, что было бы невозможно с другим физическим диском.

Ну, но я использую copytruncate директива, которая делает копию исходного файла, а затем усекает исходный файл. Поэтому не должно быть проблем с перемещением вновь скопированного файла в разное расположение на разных физических дисках.

но когда я запускаю logrotate, он все еще жалуется на logfile и olddir на разных устройствах.

есть ли способ обойти это ? Возможно, работает какой-то пользовательский скрипт postrotate, который перемещает файлы журнала в нужное место ?

1 ответов


это из страницы logrotate man.

  olddir directory <br>
        Logs  are moved into directory for rotation. **The directory must be on the 
        same physical device as the log file being rotated**, and is assumed to  be 
        relative  to  the  directory holding the log file unless an absolute path 
        name is specified. When this option is used all old versions of  the  log 
        end  up  in  directory.   This  option  may be overridden by the noolddir 
        option.

существование olddir на том же физическом устройстве ограничение.

можно использовать ниже обходной путь.

set olddir в папку в том же физическом диске, и использовать postrotate скрипт для перемещения содержимого olddir в каталог на другом физическом устройстве.

Пример конфигурационный файл:

/var/log/httpd/*log {
        copytruncate
        olddir /var/log/httpd/olddir
        rotate 5
    missingok
    notifempty
    sharedscripts
    delaycompress
    postrotate
        mv /var/log/httpd/olddir/* /vagrant/httpd/olddir/
        /sbin/service httpd reload > /dev/null 2>/dev/null || true
    endscript
}