rsync via cron. Wie aktiviere ich die Protokollierung?

8

Ich sichere einen Remote-Server mit rsync auf einem anderen Computer.

In cron.daily habe ich eine Datei mit folgendem:

rsync -avz -e ssh [email protected]:/ /mybackup/

Für die Anmeldung wird ein öffentliches / privates Schlüsselpaar verwendet. Dies scheint die meiste Zeit gut zu funktionieren, aber ich habe es (dummerweise) nur wirklich überprüft, indem ich mir die Daten einiger wichtiger Dateien (MySQL-Dumps) angesehen habe, von denen ich weiß, dass sie sich jeden Tag ändern. Offensichtlich kann nach dieser Datei ein Fehler auftreten.

Manchmal scheitert es. Wenn ich es manuell ausführe, passiert manchmal so etwas wie "Client-Reset".

Was ist der beste Weg, um es zu protokollieren, damit ich mit Sicherheit überprüfen kann, ob es abgeschlossen ist oder nicht? Das Cron-Protokoll zeigt keine Fehler an. Ich habe es nicht ausprobiert, aber die rsync-Manpage in der alten Version von CentOS auf dem Sicherungscomputer zeigt die Option --log-file nicht an. Ich denke, ich könnte stdout mit> umleiten, aber ich möchte nicht wirklich über jede Datei Bescheid wissen. Ich möchte nur wissen, ob alles funktioniert hat oder nicht.

Vielen Dank

Tetranz
quelle

Antworten:

13

Ich denke, Sie haben Ihre eigene Frage bereits gelöst. Wenn Sie sowohl stdout als auch stderr in eine Datei umleiten, erhalten Sie nicht bei jeder Datei-rsync-Übertragung eine Ausgabe. Dies wird nur erzeugt, wenn Sie im verbose ( -v) -Modus ausgeführt werden. Das Standardverhalten von rsyncist, nur im Fehlerfall eine Ausgabe zu erzeugen. Also kannst du das machen ...

rsync ... > /var/log/rsync.log 2>&1

... und überprüfen Sie diese Datei, um festzustellen, ob die letzte rsync erfolgreich war oder nicht. Ich verwende explizit >, wodurch die Protokolldatei bei jeder Ausführung überschrieben wird rsync.

Sie können auch die Tatsache nutzen, dass das rsyncProgramm mit einem Code ungleich Null beendet wird, wenn die Übertragung fehlschlägt. Sie könnten also so etwas tun:

rsync ... || echo "rsync failed" | mail -s 'rsync falied' [email protected]
Larsks
quelle
Vielen Dank. Ich werde es versuchen. Ich nahm an, dass ich jede Datei im Protokoll erhalten würde, da dies auf dem Bildschirm angezeigt wird, wenn ich es manuell und ohne Ausführlichkeit versuche. Die Mail-Sache sieht gut aus.
Tetranz
Wenn Sie rsync manuell ohne das -vFlag ausführen und immer noch die Ausgabe pro Datei sehen, stimmt etwas nicht. Auf der Manpage rsync heißt es: "Standardmäßig arbeitet rsync unbeaufsichtigt. Ein einzelnes -v gibt Ihnen Informationen darüber, welche Dateien übertragen werden, und am Ende eine kurze Zusammenfassung."
Larsks
Nun, das ist definitiv was passiert. -v scheint standardmäßig aktiviert zu sein. Ich habe gerade die Protokollumleitung durchgeführt, wie Sie vorschlagen, und das Protokoll enthält eine Zeile für jede Datei. Ich sage nicht, dass du falsch liegst. CentOS muss rsync anders kompiliert haben. Ich habe Ausschlüsse für / proc und / sys hinzugefügt.
Tetranz
Ich verwende CentOS und rsync verhält sich wie beschrieben. Wie sieht Ihre Kommandozeile tatsächlich aus?
Larsks
1
Sie laufen im ausführlichen Modus. Du hast da einen -v.
Larsks
4

Nehmen Sie die Option -v heraus und fügen Sie -q hinzu. Dies gibt nur die Fehler

Matt
quelle
1

Vielleicht könnten Sie das Syslog über den folgenden Befehl verwenden: logger .

Ich führe Skripte folgendermaßen aus:

rsync -v what user@host 2>&1 | logger -t backup

Dies wird /var/log/messagesstandardmäßig beschrieben.

user897079
quelle