rsync: gzip na tolerancyjnym źródle

0

Muszę co godzinę przesyłać kilka plików dziennika do magazynu, do którego mogą dotrzeć wszyscy użytkownicy, i używam do tego rsync, ale problem pojawia się, gdy plik dziennika jest obracany i automatycznie zipowany, rsync wykrywa, że ​​jest nowy plik i on też go przesłał, co oznacza, że ​​na serwerze docelowym mam:

example.log.2014-01-17--00

i

example.log.2014-01-17--00.gz

który jest tym samym plikiem dziennika, ale spakowany zipem gzip -9.

to jest moja linia rsync, jest zawarta w skrypcie:

rsync -rvzt --include "*/" --include "$pattern" --exclude "*" $directory [email protected]:/home/loguser/logstorage/$subdir/$basefilename

jest wykonywany co godzinę przez plik crontab i przesyła wszystkie pliki pasujące do wzorca $ i katalogu $ zawartych w pliku zawierającym ścieżki i wzorce, które chcę przenieść.

Więc moje pytanie brzmi, czy istnieje opcja rsync, której nie widziałem, czy jest jakaś możliwość, aby to zrobić i jak.

Z góry dziękuję.

Adryoid
źródło
@Andryoid - Czytanie sekwencji --include/ --exclude: pobrać wszystkie podfoldery */, tylko ze wzorem $pattern, ale potem wszystko wykluczyć *? Czy zinterpretowałem zamiar, a jeśli tak, to nie brzmi dobrze. Czy nie byłoby, aby wszystkie podfoldery */, tylko ze wzoru $pattern, ale potem zdejmować pliki .gz, które byłyby: --exclude "*.gz". Bez def za $subdir, $basefilenamei np Path - prawie kompletny przykład, to co mogę myśleć poza czubek głowy.
Billy McCloskey

Odpowiedzi:

0

OK, wyjaśnię trochę więcej na temat mojego środowiska i tego, czego szukam:

Mam środowisko, w którym jest tyle plików dziennika, że ​​te pliki dziennika są obracane w zależności od ich wagi, więc nie wszystkie pliki dziennika są obracane, mam też wiele różnych ścieżek, w których znajdują się te pliki dziennika, a te pliki dziennika są nazwany jak wzór.

To jest przykład pliku zawierającego ścieżki, nazwy, czasy ZIP i 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

W takim przypadku skrypt odczyta i pobierze ścieżki do zmiennej $directory, zastosuje wzorzec do zmiennej, $patterna ZIP i DEL zostaną użyte dla plików dziennika zip starszych niż 3 dni i usuwają stare pliki dziennika starszych niż 30 dni, ale jest to kolejny część skryptu.

Muszę więc co godzinę przesyłać bieżące pliki dziennika na serwer docelowy, ale nie mogę z nich korzystać --delete, ponieważ na serwerze docelowym muszę przechowywać pliki dziennika przez 90 dni.

Stworzyłem więc ten skrypt, który działa co godzinę i przesyła pasujące pliki sygnatur na serwer docelowy.

Na obu serwerach jest kolejna robota koleżeńska, która „utrzymuje porządek w pokoju”, uruchamiając raz dziennie i kompresując pliki dziennika starsze niż 1 dzień i usuwając te, które są starsze niż 90 dni, ale nie może wykonać swojej pracy, ponieważ jeśli spróbuje to gzip -9 example.log.2014-01-17--12zrobić ” Aby to zrobić, plik istnieje, ponieważ został skompresowany w źródle i przesłany do docelowego pliku zip.

Zdaję sobie sprawę, że jeśli dodam lub zmodyfikuję, --exclude "*.gz"zamiast --exclude "*"spakowanych plików, nie zostaną one przeniesione, w każdym razie zostaną spakowane w miejscu docelowym i problem rozwiązany, myślę, ale muszę się upewnić, że są takie same pliki z tym samym md5sum, ponieważ jest tyle ważnych plików dziennika.

Woow, mam nadzieję, że rozumiesz i jestem bardzo wdzięczny za twój czas i współpracę, mam nadzieję, że pomoże to więcej sysadminowi z tym samym problemem lub podobnym.

Jeśli potrzebujesz więcej wyjaśnień, daj mi znać.

Adryoid
źródło