Как заставить (или обойти) 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
}