Backup Script

MasterOfWar

Lt. Commander
Registriert
Jan. 2009
Beiträge
1.397
Abend,
ich versuche mir gerade nen Backup Script für nen Server zu basteln, dass alle 2 stunden einen Ordner sichert.
Das Script sieht im Moment so aus:
Code:
#!/bin/sh
Zahl=1
while [Zahl=1]  ;do
datum=$(date +%Y-%m-%d)
mkdir /root/backup/$datum
cp -R /root/world /root/backup/$datum
sleep 7200
done

Das Problem dabei ist, dass der Ordnername so nur das Jahr, denn Monat und den Tag enthält.
Jedoch müsste er auch die Uhrzeit enthalten, leider habe ich keine Idee wie das geht.
 
Laß das Backup aller 2h von cron immer neu starten, nicht mit einem Skript mit sleep für 2 Stunden. "man cron" und "man crontab" liefern dir die nötigen Informationen.

Wenn du mit "date +%Y-%m-%d" das Datum ermittelst, liegt die Idee nah, per date auch die Uhrzeit(Stunden, Minuten, Sekunden) zu ermitteln. date kann das. Lies also "man date" ... da steht es drin.

"while [Zahl=1]" geht so nicht. While muß eine Liste von Kommandos folgen. "[Zahl=1]" ist kein Kommando. "[ Zahl=1 ]", also mit Leerzeichen, is hingegen eins, denn [ ist ein normales Unix-Programm und Zahl=1 und ] sind Parameter für dieses Programm. "man [" lesen!

Wenn du mit while nur eine Endlosschleife machen möchtest, muß while irgendein immer erfolgreiches Kommando folgen. Den Hokuspokus mit der Zahl kannst du dir komplett sparen. Üblich ist z.B. "while true; do ....; done". Schön kurz ist "while :; do ....; done".

Eine klassische Bourne Shell (/bin/sh) kann mit "datum=$(date +%Y-%m-%d)" nichts anfangen. Das funktioniert nur, wenn eine bash (oder was ähnliches) als /bin/sh installiert ist, wovon man nicht ausgehen sollte. Also schreib entweder explizit ein bash-Skript (mit #!/bin/bash am Anfang) oder verwende eine sh-kompatible Syntax. Die wäre hier "datum=`date +%Y-%m-%d`", also Backquotes um das Kommando statt $(...).

Dein Skript hat keinerlei Fehlerbehandlung und liefert keinerlei Benachrichtigung, ob das Backup erfolgreich erledigt wurde oder gescheitert ist. Keine gute Idee.
 
Zuletzt bearbeitet:
Danke für den tipp mit men date und das mit der Schleife.
Natürlich weiß ich, dass das Skript nicht besonders toll ist, aber es soll nur die saves von unserem Minecraft Server sichern, dazu reicht es wohl und wenn mal was schief geht ist es auch nicht so schlimm, weswegen exception handling nicht soo wichtig ist.
 
Nutze cron. Viel einfacher und zuverlässiger.
 
du könntest auch mit hardlinks eine menge platz sparen, mit deltas nochmals mehr. da bieten sich dann rsync und konsorten an.
sollte man aber nur machen wenn man sich bewusst ist welche probleme das mit sich bringt ;)

ich persönlich benutze keinerlei platzsparende methoden beim backup, schon gar keine kompression! damit spar ich mir das wiederherstellen des backups und all die tollen dinge die dabei schief gehen können :)
 
Wenn die Zielplatte hardlink-fähig ist (spricht kein FAT oder ein anderes antikes Dateisystem), dann schau dir mal rsnapshot an. Zusammen mir cron kann man damit sehr platzsparend und zuverlässig inkrementelle Backups machen.
 
Zurück
Oben