2014-12-24 12 views
7

Zajmuję się tworzeniem skryptu w Pythonie, który może zbierać dzienniki z wielu maszyn. Używam rsync. Ale jest problem. Mam dzienniki dla wielu usług, które wyglądają następująco:rsync pomijanie nieistniejących plików na źródle

service1.log 
service2.log 
service3.log 
... and so on 

Ścieżki do tych plików i folderów są określone w kodzie. Ale czasami pojawia się sytuacja, gdy niektóre pliki dziennika jeszcze nie istnieją. A rsync nie kończy się pomyślnie.
Jak mogę pominąć pliki, które nie istnieją na komputerze źródłowym?
P.S. Używam saltstack rządzić maszyny, więc wzywam:

__salt__['cmd.retcode']('rsync -a file1 file2...') 
+0

może najlepiej użyć próby/z wyjątkiem –

+0

@PadraicCunningham nie ma wyjątku. Nazywam to programem cli i po prostu nie zwraca kodu ret_code 0. –

+0

jak go używasz? Myślałem, że może używasz podprocesu lub pexpect –

Odpowiedz

11

Zastosowanie --ignore-missing-args:

strona wersja 3.1.0 człowiek mówi

--ignore-missing-args

When rsync is first processing the explicitly requested 
source files (e.g. command-line arguments or --files-from 
entries), it is normally an error if the file cannot be 
found. This option suppresses that error, and does not 
try to transfer the file. This does not affect subsequent 
vanished-file errors if a file was initially found to be 
present and later is no longer there. 

Na przykład:

% rsync --version 
rsync version 3.1.0 protocol version 31 
% rsync bogusfile dest 
rsync: link_stat "/tmp/bogusfile" failed: No such file or directory (2) 
rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1183) [sender=3.1.0] 
% rsync --ignore-missing-args bogusfile dest 
# <no error> 

Opcja --ignore-missing-args dodano trochę czasu między wersją 3.06 i 3.1.0.

The online version 3.06 rsync man page o tym nie wspomina. Ale the git repository wskazuje, że ta opcja została dodana w 2009 roku.

+1

Thanx! Dostałem 3.0.6 więc zrobiłem nie znajduję tej opcji na moich stronach man. –