[gelöst] Probleme mit Backup bash Script

  • Ich benutze rdiff-backup um meine Systeme zu sichern. Bis Heute hatte ich für jeden Job ein extra Script. Da ich nun aber eine Übersicht meine Backups als Mail haben will, habe ich mich hingesetzt und eine generellere Lösung gesucht.
    Das Script was ich nun habe wird mit einer Job Datei aufgerufen. In der steht was wohin gesichert werden soll. Zusätzlich will ich in der selben Datei Kommandos auflisten die vor bzw nach dem Backup ausgeführt werden sollen.
    Dabei habe ich nun das Problem das wenn Sie per ssh ausgeführt werden nur der erste befehl ausgeführt wird. Und das wenn sie lokal ausgeführt werden ich keine Sonderzeichen wie [] und || verwenden kann.


    Schaut euch doch bitte die excutecmd Funktion an. Vielleicht hat ja jemand eine Lösung dafür. Was ich nur ungern machen würde ist die Vor- und Nach- Backup Kommandos in separaten Dateien zu speichern. Auch wüste ich dann nicht wie ich die Verarbeitung beim ersten gescheiterten Kommando abbrechen könnte.

  • Deine Probleme kommen vermutlich daher, dass du bei ssh-Kommandos doppeltes Quoting benötigst: Ein mal, um die lokale Shell vom Interpretieren abzuhalten, und ein zweites mal, um die Remote-Shell davon abzuhalten.


    Folgendes sei mal als Anregung empfohlen:


    Das "${cmds[@]}" macht dabei weitestgehend das gleiche, wie dein "$@", nur mit einem Bash-Array. Das sollte auch tunlichst in Anführungszeichen stehen, da nur so die Zerlegung in Parameter beibehalten wird. Beachte, wann in obigem Beispiel die mehrfachen Leerzeichen erhalten bleiben!


    Gruß,


    Udo

  • Ich hatte zuvor schon mit den Quoting gespielt aber hatte bei lokaler Ausführung ohne ssh "comand not found" bekommen. Erst wenn ich dort eval verwende klappt es.


    Aber mit ssh klapt es immer noch nicht. Zwar wird das erste Kommando erfolgreich abgearbeitet jedoch wird Meine Job Datei dann nicht weiter eingelesen.

    Code
    + '[' 7 -gt 6 -a 7 -lt 11 ']'
    + '[' kiste '!=' localhost ']'
    + excuteremote '[ -d /tmp/backup ] || mkdir /tmp/backup'
    + ssh kiste '[ -d /tmp/backup ] || mkdir /tmp/backup'
    + '[' 0 '!=' 0 ']'
    + return 0
    + read line
    + echo 'Vor Beckup Komandos erfolgreich beendet'


    Ich vermute das sobald ich ssh benutze der Datei Descriptor den ich zuvor auf meine Job Datei gelegt habe umgelegt wird und deshalb die Datei nicht weiter gelesen wird.

  • wie sieht denn die config überhaupt genau aus, k.A. wo las problem liegt?

  • Eingangs hatte ich ja Zwei Probleme
    1) Sonderzeichen wurden bei lokaler Ausfürung nicht richtig Verarbeitet.
    2) Soballt ssh ins spiel kam wurde die Job Datei nicht weiter verarbeitet.


    Problem 1 ist gelöst ich habe die Funktion excutlocal wie folgt angepasst

    Code
    function excutlocal {
            eval "$@" >>$LOG
            if [ "$?" != "0" ]; then
                    echo "Fehler bei $1" >>$LOG
                    return 1
            fi
            return 0
    }


    Problem 2 henkt offensichtlich damit zusammen das ich die Datei vom Standard Eingabe Kanal einlese und in der schleife in der sie verarbeitet wird ssh aufrufe was den Standard Eingabe Kanal offensichtlich umlenkt.


    Ich habe versucht das Problem zu umgehen und die Datei auf einen andrem Descriptor geöffnet. Zunächst funktioniert das auch jedoch wenn die Datei zum zweitenmal gelesen werden soll, scheint es so als sei sie lehr. BZW es sieht so aus als ab am Ende der Datei gelesen werde würde.



    Das Script bleibt dann einfach bei read Line stehen

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!