Bash-Skripting, auf Fehler prüfen, Protokollierung

7

Hier ist einer für die Bash-Fu-Assistenten. Nein, eigentlich mache ich nur Spaß, ihr wisst das wahrscheinlich alle außer mir ..

Ich versuche ein Backup-Shell-Skript zu erstellen. Die Idee ist ziemlich einfach: Finde Dateien in einem bestimmten Ordner, älter als 7 Tage, tar / gzip sie in ein anderes Verzeichnis und entferne sie. Das Problem ist, ich bin mir nicht sicher, ob ich genug Berechtigungen habe, um eine tar / gzip-Datei im Zielverzeichnis zu erstellen. Gibt es einen (richtigen) Weg, um zu überprüfen, ob die Datei erfolgreich erstellt wurde, und wenn ja, löschen Sie die Dateien. Andernfalls überspringen Sie diesen Teil und zerstören Sie nicht die Kundendaten. Ich habe gehört, dass sie das nicht sehr mögen.

Folgendes habe ich bisher:

%Vor%

Grundsätzlich müsste ich überprüfen, ob in den Zeilen 7 und 8 alles in Ordnung war, und wenn ja, führe 9 aus.

Außerdem möchte ich eine Protokolldatei dieser Operationen erstellen, damit ich weiß, dass alles gut gegangen ist (dies ist ein nächtlicher Cron-Job).

    
dr Hannibal Lecter 02.03.2010, 10:00
quelle

4 Antworten

6

Zum Protokollieren können Sie Abschnitte Ihres Skripts in geschweifte Klammern einschließen und das stdout in eine Protokolldatei umleiten:

%Vor%     
Dennis Williamson 02.03.2010, 13:59
quelle
11

Bei der Protokollierung können Sie veranlassen, dass alle Ausgaben, die mit Standardausgabe und / oder Standardfehler geschrieben wurden, in eine Datei gehen. Auf diese Weise müssen Sie die Ausgabe jedes Befehls nicht umleiten:

%Vor%

Um einen Befehl nur auszuführen, wenn ein vorheriger erfolgreich ist, können Sie ihn mit Bedingungen verketten:

%Vor%

Sie können also Dinge wie

tun %Vor%

oder geben Sie Details in der Protokollausgabe an:

%Vor%     
Idelic 02.03.2010 16:43
quelle
5

Der einfache Ausweg, aber ohne explizite Fehlermeldung addiere -e zum shebang, d. h. #!/bin/sh -e , was dazu führt, dass die Shell beendet wird, wenn ein Befehl fehlschlägt.

Cron sollte Ihnen jedoch eine Fehlermeldung über die E-Mail geben, die ich vermute.

Wenn Sie jedoch das vollständige Backup-Schema verwenden möchten, würde ich vorschlagen, dass Sie etwas verwenden, was bereits gemacht wurde. Es gibt eine Menge da draußen, und die meisten arbeiten sehr gut.

    
falstro 02.03.2010 10:06
quelle
3

GNU tar hat --remove-files , das Dateien entfernt, sobald sie dem Archiv hinzugefügt wurden. v bewirkt, dass Dateien beim Hinzufügen aufgelistet werden. z wird den Tear im Handumdrehen durch gzip leiten.

Ihre find Lösung ist rassig; Eine Datei kann die Kriterien zwischen den Aufrufen erfüllen und somit gelöscht, aber nicht gesichert werden.

    
Ignacio Vazquez-Abrams 02.03.2010 10:07
quelle

Tags und Links