rsync: gzip на исходном коде
Мне нужно передавать пару файлов журнала каждый час в хранилище журналов, доступное для всех пользователей, и для этого я использую rsync, но проблема возникает, когда файл журнала поворачивается и автоматически архивируется, rsync обнаруживает новое файл, и он тоже передал его, это означает, что на сервере назначения у меня есть:
example.log.2014-01-17--00
а также
example.log.2014-01-17--00.gz
это тот же лог-файл, но упакованный с помощью gzip -9.
это моя строка rsync, она включена в скрипт:
rsync -rvzt --include "*/" --include "$pattern" --exclude "*" $directory loguser@123.456.789.000:/home/loguser/logstorage/$subdir/$basefilename
он выполняется каждый час crontab, и он передает все файлы, соответствующие $pattern и $directory, включенные в файл, который содержит пути и шаблоны, которые я хочу передать.
Поэтому мой вопрос: есть ли опция rsync, которую я не видел, или есть ли возможность сделать это и как.
Заранее спасибо.
2 ответа
Рассматривали ли вы использование пересылки rsyslog [1]?
Кроме того, из [2] это выглядит как добавление --exclude '*.gz'
должен исправить вашу проблему. Почему ты --exclude '*'
? Мое чтение этого было бы то, что каждый файл исключен из синхронизации.
[1] http://www.rsyslog.com/storing-and-forwarding-remote-messages/
[2] http://www.thegeekstuff.com/2011/01/rsync-exclude-files-and-folders/
Хорошо, я объясню немного больше о моей среде и о том, что я ищу:
У меня есть среда, в которой столько лог-файлов, эти лог-файлы вращаются в зависимости от своего веса, поэтому не все лог-файлы вращаются, у меня также есть много разных путей, где находятся эти лог-файлы, и эти лог-файлы узороподобный по имени.
Это пример файла, содержащего пути, имена, время ZIP и DEL:
# all entries in this file are logfile directories.
# Report: NO # Specify if you want to receive result by mail, options (YES/NO)
# These files will be zipped after <ZIP> days and deleted after <DEL> days
# If <DEL> is not specified, no files will be deleted
# Format: <DIR> <FILEPATTERN> <ageInDaysBeforeBZIP> [<ageInDaysBeforeDELETE>]
# Example: /home/loguser/logstorage "PATTERN" <ZIP> <DEL>
#
/home/user1/www/logs/ "example.log*" 3 30
В этом случае скрипт будет читать и вводить пути в переменную $directory
, примет образец к переменной $pattern
ZIP & DEL будет использоваться для zip-файлов журнала старше 3 дней и удаляет старые log-файлы старше 30 дней, но это еще одна часть скрипта.
Итак, что мне нужно сделать, это перенести текущие журнальные файлы ежечасно на целевой сервер, но я не могу использовать --delete
потому что на целевом сервере мне нужно хранить лог-файлы в течение 90 дней.
Итак, я создал этот скрипт, который работает каждый час и передает соответствующие файлы шаблонов на целевой сервер.
На обоих серверах есть еще один cronjob для "поддержания чистоты комнаты", запускаемый один раз в день и архивирующий лог-файлы старше 1 дня и удаляющий те, которые старше 90 дней, но он не может выполнять свою работу, потому что если он попытается gzip -9 example.log.2014-01-17--12
не может сделать это, файл существует, потому что был заархивирован в источнике и передан в пункт назначения.
Я понимаю, если я добавлю, или изменить --exclude "*.gz"
вместо --exclude "*"
Заархивированные файлы не будут переданы, в любом случае они будут заархивированы по месту назначения и проблема решена, я думаю, но я должен быть уверен, что есть те же файлы с той же md5sum, потому что там очень много важных log-файлов.
Ух ты, я надеюсь, что ты понимаешь, и я очень, очень благодарен за твое время и сотрудничество, я надеюсь, что это поможет еще одному сисадмину с той же проблемой или схожей.
Если вам нужно больше объяснений, пожалуйста, дайте мне знать.