ubuntuusers.de

Backupskript

Status: Gelöst | Ubuntu-Version: Ubuntu 11.04 (Natty Narwhal)
Antworten |

prog266

Anmeldungsdatum:
26. März 2011

Beiträge: 67

Da ich noch nicht viel Erfahrung mit Shell Programmierung gemacht habe, sind hier meine fragen.

Wie kann ich eine Schleife bauen, damit das Backup jede Stunde durchgeführt wird? Wie kann ich immer das älteste von 20 Backups löschen?

Hier ist mein bisheriges Skript (Noch einfach und Simpel ^^)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
#!/bin/sh

## Variablen und Einstellungen.
dir1=
dir2=
dir3=
dir4=
enddir=
datum=$(date +%d.%m.%Y-%H:%M)
file=backup-$datum.zip

## Backup
cd $enddir
zip -r $file $dir1 $dir2 $dir3 $dir4
sleep 2

Ich hoffe auf Hilfe prog266

Kinch

Anmeldungsdatum:
6. Oktober 2007

Beiträge: 1261

prog266 schrieb:

Wie kann ich eine Schleife bauen, damit das Backup jede Stunde durchgeführt wird?

Nimm dazu besser einen Cron-Dienst.

Wie kann ich immer das älteste von 20 Backups löschen?

Nimm dazu besser, rdiff, rsnapshot oder etwas ähnliches.

Für versionierstes Backup nutze ich persönlich Versionskontrolle (git) + rsync; ist aber nicht in jedem Fall zu empfehlen.

fckawe

Avatar von fckawe

Anmeldungsdatum:
23. April 2011

Beiträge: 509

Wohnort: Freiburg im Breisgau

prog266 schrieb:

Wie kann ich eine Schleife bauen, damit das Backup jede Stunde durchgeführt wird?

Schau dir dazu mal cron an. Außerdem gibt es mit rsync ein nettes Tool für Datensicherungen - damit bekommst du (je nach Anforderung) sicher schneller ein besseres Ergebnis.

Zu dem löschen der ältesten Datei fällt mir gerade nichts ein. Vielleicht gibt es ein Tool für Logdateien-Rotieren. Ansonsten hätte ich höchstens die Idee, dass du per find Logdateien löschen könntest, die z.B. älter als zwei Wochen sind. Das heißt dann aber, dass vielleicht alles Logs weg sind, wenn du in den letzten zwei Wochen gar keine Sicherung gemacht hast.

Gruß, Gerald

Kinch

Anmeldungsdatum:
6. Oktober 2007

Beiträge: 1261

fckawe

Zu dem löschen der ältesten Datei fällt mir gerade nichts ein. Vielleicht gibt es ein Tool für Logdateien-Rotieren. Ansonsten hätte ich höchstens die Idee, dass du per find Logdateien löschen könntest, die z.B. älter als zwei Wochen sind. Das heißt dann aber, dass vielleicht alles Logs weg sind, wenn du in den letzten zwei Wochen gar keine Sicherung gemacht hast.

Logrotate ist eine Möglichkeit. Ansonsten: Einfach die Dateien nach Modifikation-Time auflisten. In Bash geht das mit 'ls -1t'; bei der Z-Shell zum Beispiel mit '*(om)'. Dann löscht man eben, zum Beispiel über Array-Operationen, alle Einträge die über 20 hinaus gehen.

prog266

(Themenstarter)

Anmeldungsdatum:
26. März 2011

Beiträge: 67

Ok, die Backups für jede Stunde werde ich dann mit Cron realiesieren. Und wie kann ich dann mit find oder ls die ältesten Dateien Löschen?

fckawe

Avatar von fckawe

Anmeldungsdatum:
23. April 2011

Beiträge: 509

Wohnort: Freiburg im Breisgau

prog266 schrieb:

Ok, die Backups für jede Stunde werde ich dann mit Cron realiesieren. Und wie kann ich dann mit find oder ls die ältesten Dateien Löschen?

Ein Beispiel mit find: angenommen deine Logfiles liegen im Verzeichnis /tmp und du willst alle löschen, die älter als 14 Tage sind. Dann funktioniert das so:

find /tmp -name "backup*.zip" -mtime +14 -exec rm {} \;

Bitte versuche aber die angegebenen Optionen zu verstehen (z.B. durch Lesen der Seite zu find im Wiki oder der Manpage). Einerseits bringt dich das weiter und andererseits vermeidest du, etwas kaputtzumachen; was mit der Kombination find + rm schnell passieren kann.

Gruß, Gerald

prog266

(Themenstarter)

Anmeldungsdatum:
26. März 2011

Beiträge: 67

Ok, habe jetzt alles mit find verstanden. Habe die entsprechende Zeile angespasst und eingefügt, danke für eure Hilfe!

user_unknown

Avatar von user_unknown

Anmeldungsdatum:
10. August 2005

Beiträge: 17621

Wohnort: Berlin

fckawe schrieb:

Ein Beispiel mit find: angenommen deine Logfiles liegen im Verzeichnis /tmp und ...

Ich habe allerdings schon von brillanteren Ideen gehört. /tmp wird bei jedem Reboot gelöscht - da haben logfiles nichts verloren. /var/log dagegen ist der vom System vorgesehene Ort für Logfiles.

Man könnte auch, wenn man im Backup die Uhrzeit speichert - die Stunde - und nicht 20, sondern 24 Backups vorhält, stündlich ganz leicht das Backup des Vortags überschreiben. Die aktuelle Stunde ermittelt man mit date:

1
echo $(date +%H)
Antworten |