• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

[gelöst] backup mit rsync und cron

pilus

Hacker
Hallo,
ich habe in meinem Rechner 2 Festplatten. Nun möchte ich mit geringen Datenverkehr täglich einen Archiv-Abgleich vom der ersten HDD zur 2. HDD machen.

Ich dachte, in der cron daily einen rsync wie folgt anzulegen:
rsync -az /home/user/ /mnt/HD2

1) Ist der rsync-Befehl so richtig? Ich möchte, dass nur wenn im Verzeichnis /home/user samt Unterverzeichnissen eine Datei hinzukommt oder aktualisiert, dass diese dann beim nächsten cronjob zur 2. HDD kopiert wird. Ältere Dateien sollen überschrieben werden! Ich will keinen doppelten Datenmüll! Ist diese Syntax so optimal?
2) wie trage ich bei OpenSuse 11.1 am besten den rsync-Befehl in die crondaily ein?

Danke

Christoph
 

longman

Advanced Hacker
Du kannst den rsync Befehl in ein Script (z.B. backup.sh) packen und dann das script per cron starten
Denke an chmod +x backup.sh, damit es ausführbar ist.

Falls du noch z.B. was aus home ausklammern willst kannst du --exclude verwenden.
Code:
#!/bin/bash
rsync -avz --exclude "SchrottDir/" --exclude "Schrottdir2/" /home/* /backup/

Dann crontab -e
Code:
5 22 * * *       $HOME/scripts/backup.sh >> /tmp/homebackup.log 2>&1

(5 22 -> 22:05)

In /tmp/homebackup.log stehen die Ausgaben des scripts, deshalb auch das v in -avz, damit ein bisschen mehr drin steht.
 
OP
P

pilus

Hacker
leider bekomme ich den cronjob nicht hin.

Ich habe wie in den Anweisungen ein script namens backup.sh erstellt (habe die Komprimierung weggelassen):
#!/home/scripts/
# Simple backup with rsync
rsync -av --delete --exclude "lost+found/" --exclude ".beagle/" --exclude ".local/" /home/* /mnt/HD2/
Ist diese Syntax für das Script so richtig? Ich habe diesen Befehl als root in der Konsole eingegeben und er scheint sauber ausgeführt zu werden. Das wird aber noch ne Weile dauern. Muss / sollte rsync eigentlich als root ausgeführt werden?

Diese Datei habe ich in dem neu erstellten Ordner /home/josef/backup.sh gespeichert und als root mit chmod -x backup.sh ausführbar gemacht.
Soweit, so gut!
Dann habe ich als root crontab -e eingegeben. Nun öffnet sich ein Editor im Eingabemodus.
Hier habe ich eingegeben:
05 01 * * * $HOME/scripts/backup.sh >> /tmp/homebackup.log 2>&1
Wie speichere ich nun den Editor? Strg+S? Ich komme irgendwie nicht aus dem Einfügemodus raus
Ist die Syntax so richtig?
 

longman

Advanced Hacker
Du kannst den cronjob auch als User einrichten.
Aus dem Editor kommst Du mit ESC und dann :wq
Es muss in der Fusszeile der Befehl :wq eingegeben werden. (w_rite q_uit)


Wenn Du chmod -x eingegeben hast, sehe ich eher schwarz.
Besser ist ein + :)

Im script hast Du den Pfad /home/script kommentiert, aber einen anderen im Text beschrieben.
Bitte prüf das nochmal, denn der Aufruf in crontab wird mit Pfad eingetragen.

...
#!/home/scripts/....
/home/josef/backup.sh....
 
OP
P

pilus

Hacker
Habe in crontab folgende Fehlermeldung:
linux-fpp6:/home/josef # crontab -e
no crontab for root - using an empty one
crontab: installing new crontab
"/tmp/crontab.XXXXgbM5UD":1: bad day-of-month
errors in crontab file, can't install.
Do you want to retry the same edit? y
crontab: installing new crontab
"/tmp/crontab.XXXXgbM5UD":1: bad day-of-month
errors in crontab file, can't install.
Do you want to retry the same edit?

chmod habe ich natürlich mit +x beschrieben - danke für Deine Aufmerksamkeit

#!/home/scripts/....
welchen Pfad soll ich denn da eintragen? Das Script ist in /home/scripts/backup.sh gespeichert

Kann ich den crontab auch manuell mit dem mc machen? Kann ich vielleicht alternativ in mit mc die Datei /etc/crontab aufrufen und den Eintrag manuell eintragen?
 

longman

Advanced Hacker
In der ersten Zeile wird die zu benutzende shell beschrieben,
also nicht das Speicherverzeichnis des scripts.
Ich hatte eben auch übersehen, dass es die erste Zeile war, sonst hätte
ich das im vorigen Post schon erwähnt.
Bist Du als user josef in dem Konsolenfenster angemeldet ?
Für mich sieht das aus, als ob Du als Josef ein root Fenster geöffnet hast.
Starte einfach eine normale Konsole und trage den job (d.h. den Aufruf $HOME/scripts/backup.sh) dort ein.
 
OP
P

pilus

Hacker
also, ich habe mich in der Konsole als root angemeldet und crontab -e angegeben. Diesmal habe ich folgende Ausgabe:
linux-fpp6:/home/josef # crontab -e
no crontab for root - using an empty one
crontab: installing new crontab
linux-fpp6:/home/josef #

Wenn ich in der Konsole als user josef $HOME/scripts/backup.sh eingebe, so kommt folgende Ausgabe:
linux-fpp6:/home/josef # $HOME/scripts/backup.sh
bash: /root/scripts/backup.sh: Datei oder Verzeichnis nicht gefunden
Wenn ich als user josef aber sh /home/scripts/backup.sh eingebe, so wird das script (der rsync) korrekt ausgeführt.

Was soll ich denn statt des Pfads #!/home/scripts eintragen?
 

longman

Advanced Hacker
1. Als user Josef die Konsole öffnen
2. In das script #!/bin/bash eintragen
3. Als Josef crontab -e eingeben
4. Dort den Aufruf des scripts eingeben
5. ESC :wq
 
OP
P

pilus

Hacker
als user josef crontab -e ausgeführt
linux-fpp6:/home/josef # whoami
root
linux-fpp6:/home/josef # exit
exit
josef@linux-fpp6:~> crontab -e
no crontab for josef - using an empty one
crontab: installing new crontab
josef@linux-fpp6:~>

als user josef mit mc das Script backup.sh aufgerufen und den Pfad geändert zu #!/bin/bash

Sollte das jetzt laufen?
 
OP
P

pilus

Hacker
ich habe zum Test mal als user josef crontab -e eingegeben und die Zeit auf 00 21 * * * gesetzt. Danach den Computer neu gestartet. Demnach hätte das Script ja um 21.00 Uhr starten müssen. Ich merke aber nichts davon - es werden keine Daten in das Verzeichnis /home/josef/HD2 geschaufelt. Irgendwie wird das Script wohl noch nicht richtig aufgerufen.

Wie gesagt, sh /home/scripts/backup.sh funktioniert einwandfrei. Es muss wohl am cronjob liegen.
 

longman

Advanced Hacker
Du kannst mit crontab -l den job auflisten
Du könntest ja einen zusätzlichen Job für z.B. 21:10 eintragen, um zu testen.
Anschliessend kannst Du den job wieder löschen.
Es gibt für die KDE auch ein Kcron, was komfortabler ist und die crontab verwaltet.
 
OP
P

pilus

Hacker
ok, habe einen neuen job um 21:20 Uhr angelegt - mal abwarten.
josef@linux-fpp6:~> crontab -e
crontab: installing new crontab
josef@linux-fpp6:~> crontab -l
# DO NOT EDIT THIS FILE - edit the master and reinstall.
# (/tmp/crontab.XXXX7vZnrl installed on Mon Jun 22 21:15:38 2009)
# (Cron version V5.0 -- $Id: crontab.c,v 1.12 2004/01/23 18:56:42 vixie Exp $)
00 01 * * * $HOME/scripts/backup.sh >> /tmp/homebackup.log 2>&1
20 21 * * * $HOME/scripts/backup.sh >> /tmp/homebackup.log 2>&1

josef@linux-fpp6:~>

Habe mit YAST Kcron installiert - aber aus einem mir nicht ersichtlichen Grund ist es unter den Programmen nicht aufgelistet
 
OP
P

pilus

Hacker
habe das mit Kcron angelegt und nun läufts
josef@linux-fpp6:~/HD2> crontab -l
# DO NOT EDIT THIS FILE - edit the master and reinstall.
30 21 * * * $HOME/scripts/backup.sh >> /tmp/homebackup.log 2>&1
# Backup
35 21 * * * /home/scripts/backup.sh
josef@linux-fpp6:~/HD2>

Und zwar funktionierte der obere cronjob (21.30 Uhr), den ich ja mit crontab -e angelegt hatte, nicht.

Dann habe ich in Kcron einen neuen Job angelegt. Das Script ausgewählt, Tag und Stunde angeklickt und nun läufts.
Danke Dir!!!
 
OP
P

pilus

Hacker
PS: was ist eigentlich, wenn ich eine Datei umbenenne oder lösche, wird mit dem Kürzel -av auch dann die jeweilige Datei / Verzeichnis im Backup umbenannt / gelöscht? Fände ich sehr sinnvoll, da ich ja sonst lauter Datenmüll anhäuft!

PPS: ich werde den Artikel dann natürlich auf gelöst setzen ;-)

Danke Dir nochmal!
 

longman

Advanced Hacker
Das der erste Eintrag nicht klappte kann eventuell an einem falschen Pfad liegen.
$HOME/scripts (/home/josef/scripts) ist was anderes als /home/scripts

Zu Deinem anderen Problem:
Es gibt bei rsync auch den Parameter --delete (man rsync liefert wertvolle Infos :))
um gelöschte Dateien im Ziel mitzulöschen.

Bitte gerne.
 

framp

Moderator
Teammitglied
@pulus Nur dass hier kein Missverständnis aufkommt :roll: Ich will hier niemanden abwürgen ;)
 
Oben