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ę.
--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
,$basefilename
i np Path - prawie kompletny przykład, to co mogę myśleć poza czubek głowy.Odpowiedzi:
Czy rozważałeś użycie rsyslog forwarding [1]?
Ponadto z [2] wygląda na to, że dodanie
--exclude '*.gz'
powinno rozwiązać problem. Dlaczego--exclude '*'
? Według mojej interpretacji każdy plik jest wykluczony z synchronizacji.[1] http://www.rsyslog.com/storing-and-forwarding-remote-messages/
[2] http://www.thegeekstuff.com/2011/01/rsync-exclude-files-and-folders/
źródło
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:
W takim przypadku skrypt odczyta i pobierze ścieżki do zmiennej
$directory
, zastosuje wzorzec do zmiennej,$pattern
a 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--12
zrobić ” 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ć.
źródło