У меня есть большой каталог файлов журналов на сервере. Все журналы находятся в одном большом каталоге.
Мы хотели бы сохранить их на другом хосте (наш архивный сервер) и хранить только последние 90 дней резервных копий на «живом» сервере.
однако из-за огромного количества журналов, которые мы создаем с помощью этого приложения, мы создали бы огромную папку, которую было бы трудно просматривать. Возможно ли с помощью RSYNC указать папки назначения на основе даты файла (а не сегодняшней текущей даты) ..
Например..
rsync <options> /logs/*.log ArchiveServer:/archive/ServerA/logs/<YYYY>/<MM>
where application.20111230.log gets dumped to /archive/ServerA/logs/2011/12
and application.20120301.log gets dumped to /archive/ServerA/logs/2012/03
Я мог бы выгрузить их все в общую папку, например / archive / ServerA / Current /, а затем, возможно, еженедельно искать файлы старше 90 дней и затем сортировать их ... но делать это непосредственно в rsync, похоже, было бы намного чище ( и у меня не было бы двух мест для поиска журналов в зависимости от того, насколько он новый)
Что-то вроде этого?
rsync /logs/*.$(date '+%Y%m%d').log ArchiveServer:/archive/ServerA/logs/$(date '+%Y')/$(date '+%m')/
Обновить:
Итак, дата уже указана в имени файла журнала. Я должен был читать медленнее.
Я не думаю, что вы сделали бы это напрямую с помощью rsync, но обернули бы все в сценарий. Если вы хотите добиться успеха с первого раза, что-то вроде:
for daysago in `seq 0 90`
do
rsync /logs/*.$(date '+%Y%m%d' -d "$daysago days ago").log ArchiveServer:/archive/ServerA/logs/$(date '+%Y' -d "$daysago days ago")/$(date '+%m' -d "$daysago days ago")/
done
Вы можете вставить «echo» перед командой rsync в цикле, чтобы увидеть, хотите ли вы этого.
Что бы вы ни делали, эти элементы будут включены, хотя другие люди будут более умны и элегантны в написании сценариев оболочки, чем я.