Skriptfrage: Schleifen und exit-Status
Hallo Liste. Ich möchte eine Schleife in dieser Art programmieren: for SRC in "/home /etc /dir1 /dir2"; do rsync -a $SRC user@host:/pfad/zum/backup done Da nun host nicht immer erreichbar ist, würde ich nun gerne abfragen, ob rsync die Dateien erfolgreich synchronisiert hat. Also zB: if (host war nicht erreichbar); do echo "Host war nicht erreichbar" | /bin/logger... fi Wie kann ich das machen? Wie finde ich heraus, ob rsync im Prinzip erfolgreich war, auch wenn es ein paar Dateien nicht sichern konnte, zB weil sie noch vor der Übertragung gelöscht wurden? Danke für Denkanstöße! -- Andre Tann
Andre Tann wrote:
Hallo Liste.
Ich möchte eine Schleife in dieser Art programmieren:
for SRC in "/home /etc /dir1 /dir2"; do rsync -a $SRC user@host:/pfad/zum/backup rsync_result=$? case rsync_result in 0) echo "alles ok" ;; *) echo "Murphy ist ein Optimist...";; esac done
Da nun host nicht immer erreichbar ist, würde ich nun gerne abfragen, ob rsync die Dateien erfolgreich synchronisiert hat. Also zB:
if (host war nicht erreichbar); do echo "Host war nicht erreichbar" | /bin/logger... fi
Wie kann ich das machen? Wie finde ich heraus, ob rsync im Prinzip erfolgreich war, auch wenn es ein paar Dateien nicht sichern konnte, zB weil sie noch vor der Übertragung gelöscht wurden?
ping -c 1 192.168.0.1 >> /dev/null 2>&2 if [ "$?" == "0" ] ; then { echo "host ist da" } else { echo "host is AWOL" } fi Sandy -- Antworten bitte nur in die Mailingliste! PMs bitte an: news-reply2 (@) japantest (.) homelinux (.) com
Sandy Drobic wrote:
Andre Tann wrote:
Hallo Liste.
Ich möchte eine Schleife in dieser Art programmieren:
for SRC in "/home /etc /dir1 /dir2"; do rsync -a $SRC user@host:/pfad/zum/backup rsync_result=$? case rsync_result in 0) echo "alles ok" ;; *) echo "Murphy ist ein Optimist...";; esac done
Da nun host nicht immer erreichbar ist, würde ich nun gerne abfragen, ob rsync die Dateien erfolgreich synchronisiert hat. Also zB:
if (host war nicht erreichbar); do echo "Host war nicht erreichbar" | /bin/logger... fi
Wie kann ich das machen? Wie finde ich heraus, ob rsync im Prinzip erfolgreich war, auch wenn es ein paar Dateien nicht sichern konnte, zB weil sie noch vor der Übertragung gelöscht wurden?
ping -c 1 192.168.0.1 >> /dev/null 2>&2
Sollte natürlich sein: ping -c 1 192.168.0.1 >> /dev/null 2>&1 Sandy -- Antworten bitte nur in die Mailingliste! PMs bitte an: news-reply2 (@) japantest (.) homelinux (.) com
Dass rsync relative detaillierte "Exit Values" liefert, ist dir bekannt? -- Viele Grüße ------------------------------------------------------------------------ Michael
Michael Behrens, Donnerstag, 10. August 2006 12:16:
Dass rsync relative detaillierte "Exit Values" liefert, ist dir bekannt?
Nein, aber ich werde sogleich in die man-Page gucken. Vermutlich wertet man sie so aus wie von Sandy angegeben, aber auch da werde ich mich jetzt einlesen, so wahr mir google helfe... -- Andre Tann
Andre Tann wrote:
Michael Behrens, Donnerstag, 10. August 2006 12:16:
Dass rsync relative detaillierte "Exit Values" liefert, ist dir bekannt?
Nein, aber ich werde sogleich in die man-Page gucken. Vermutlich wertet man sie so aus wie von Sandy angegeben, aber auch da werde ich mich jetzt einlesen, so wahr mir google helfe...
Die Auswertung mit einem case Konstrukt ist relativ einfach, aber du musst natürlich wissen, was welche Fehlercode bedeutet, um richtig zu reagieren. Vor dem rsync-Aufruf die Erreichbarkeit zu prüfen, ist natürlich Pflicht, aber auch nach dem rsync-Aufruf den Rückgabewert von rsync auszuwerten, sollte im Script geschehen. Sandy -- Antworten bitte nur in die Mailingliste! PMs bitte an: news-reply2 (@) japantest (.) homelinux (.) com
Sandy Drobic, Donnerstag, 10. August 2006 12:45:
Die Auswertung mit einem case Konstrukt ist relativ einfach, aber du musst natürlich wissen, was welche Fehlercode bedeutet, um richtig zu reagieren.
Jo, ich hab mir das schon angelesen, und entsprechend im Skript eingebaut. Eine Reaktion ist allerdings nicht nötig, der Server ist entweder erreichbar oder nicht, das spielt keine Rolle. Ich möchte es nur wissen=geloggt haben.
Vor dem rsync-Aufruf die Erreichbarkeit zu prüfen, ist natürlich Pflicht
Das scheint mir nicht so wichtig. Nur weil der Server auf Ping reagiert heißt das nicht, daß er auch ssh-Verbindungen akzeptiert. Dasselbe gilt umgekehrt: der Server verwirft Ping, akzeptiert aber ssh. Also wozu Ping? -- Andre Tann
Andre Tann wrote:
Sandy Drobic, Donnerstag, 10. August 2006 12:45:
Die Auswertung mit einem case Konstrukt ist relativ einfach, aber du musst natürlich wissen, was welche Fehlercode bedeutet, um richtig zu reagieren.
Jo, ich hab mir das schon angelesen, und entsprechend im Skript eingebaut. Eine Reaktion ist allerdings nicht nötig, der Server ist entweder erreichbar oder nicht, das spielt keine Rolle. Ich möchte es nur wissen=geloggt haben.
Vor dem rsync-Aufruf die Erreichbarkeit zu prüfen, ist natürlich Pflicht
Das scheint mir nicht so wichtig. Nur weil der Server auf Ping reagiert heißt das nicht, daß er auch ssh-Verbindungen akzeptiert. Dasselbe gilt umgekehrt: der Server verwirft Ping, akzeptiert aber ssh. Also wozu Ping?
Andre, die Frage kannst du am besten beantworten, schließlich wolltest du in deinem Script ein Ping verwenden. :-)) Ansonsten kannst du natürlich auch im Script einen Connect auf Port 22 auswerten. Wie du das machst, bleibt dir überlassen. Für mich ist viel wichtiger, nach dem Aufruf von rsync den Fehlercode zu prüfen. Sandy -- Antworten bitte nur in die Mailingliste! PMs bitte an: news-reply2 (@) japantest (.) homelinux (.) com
Sandy Drobic, Donnerstag, 10. August 2006 13:58:
Andre, die Frage kannst du am besten beantworten, schließlich wolltest du in deinem Script ein Ping verwenden. :-))
Äh, ne, wollte ich nicht, das war doch Dein Vorschlag.
Ansonsten kannst du natürlich auch im Script einen Connect auf Port 22 auswerten. Wie du das machst, bleibt dir überlassen.
Für mich ist viel wichtiger, nach dem Aufruf von rsync den Fehlercode zu prüfen.
Da gebe ich Dir im Prinzip recht. In meinem Fall allerdings ist es so, daß der Fehlercode egal ist. Denn der Server, auf den rsync schieben soll, ist nur dazu da, das Backup zu backupen. Mal läuft er, dann wieder nicht, und es ist egal, ob rsync Erfolg hatte. Für mich ist nur wichtig, daß ich später weiß, wann zuletzt ein erfolgreiches Backup gelaufen ist. Aus diesem Thread nehme ich mit a) die Rückgabecodes von rsync, und wie man sie auswertet, und b) Deinen Vorschlag mit case. Damit kann ich schon viel besser meine Skripten bauen. Danke und Gruß! -- Andre Tann
participants (3)
-
Andre Tann
-
Michael Behrens
-
Sandy Drobic