2014-12-24 11 views
7

Ich entwickle ein Skript in Python, das Protokolle von mehreren Rechnern sammeln könnte. Ich benutze rsync. Aber es gibt ein Problem. Ich habe Protokolle für mehrere Dienste, die wie folgt aussehen:rsync Überspringe nicht vorhandene Dateien auf der Quelle

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

Pfade zu diesen Dateien und Ordnern sind im Code angegeben. Aber manchmal komme ich in eine Situation, wenn einige Protokolldateien noch nicht existieren. Und rsync wird nicht erfolgreich abgeschlossen.
Wie kann ich Dateien überspringen, die auf dem Quellrechner nicht vorhanden sind?
P.S. Ich verwende saltstack Maschinen zu beherrschen, so nenne ich:

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

vielleicht am besten zu versuchen/außer –

+0

@PadraicCunningham gibt es keine Ausnahme. Ich nenne es wie cli Dienstprogramm und es retad ret_code 0. –

+0

wie verwenden Sie es? Ich dachte, du verwendest vielleicht subprocess oder pexpect –

Antwort

11

Verwendung --ignore-missing-args:

Die Version 3.1.0 Manpage sagt,

--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. 

Zum Beispiel:

% 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> 

Die --ignore-missing-args Option wurde einige Zeit zwischen Version 3.06 und 3.1.0 hinzugefügt.

Die online version 3.06 rsync man page erwähnt es nicht. Aber the git repository zeigt an, dass diese Option im Jahr 2009 hinzugefügt wurde.

+1

Danke! Ich habe 3.0.6, also habe ich nicht finde diese Option nicht in meinen man-Seiten. –

Verwandte Themen