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-файлов.

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

Если вам нужно больше объяснений, пожалуйста, дайте мне знать.

Другие вопросы по тегам