Kann mir jemand helfen? -> Cronjob & Rsync

R

robb

unregistriert
Thread Starter
Dabei seit
14.01.2005
Beiträge
496
Reaktionspunkte
0
Nabend zusammen,

mein Backup Script läuft schon seit einiger Zeit nicht mehr und ich finde den Fehler nicht :( Vielleicht kann ja jemand ein wenig weiterhelfen.

Folgendes steht im Crontab:
Code:
59 * * * * sh /Users/robb/Documents/Backups/Rsync/backup.command

Dies hier steht in dem Backup-Script:
Code:
#!/bin/sh

RSYNC=/usr/bin/rsync

if [ -f '/Volumes/Backup/Bilder/20081014/photocase2dgzpvu9brvj.jpg' ] 
then
	sudo $RSYNC -a -x -S --progress --exclude-from "/Users/robb/Documents/Backups/Rsync/ausnahmen.txt" $* --delete "/Volumes/Extern/" "/Volumes/Backup/" > "/Users/robb/Documents/Backups/Rsync/rsync.log"
else
	echo "Backup-Platte nicht gefunden!"
fi

Das Backupscript hat CHMOD 755, wird aber nicht aufgerufen. Zumindest wird kein rsync gestartet und die Log Datei wird nicht beschrieben.

Ich fürchte da wird wohl irgendwo ein Syntaxfehler sein, nur wo?
Ich freue mich über jede Hilfe!

Grüße
robb
 
der sudo Befehl in deinem RSYNC Aufruf erfordert eine Kennworteingabe.

Wenn Du das wirklich mit root rechten laufen lassen willst log dich als root ein und schreib das script in seine crontab, dann brauchst auch kein sudo ;)
 
der sudo Befehl in deinem RSYNC Aufruf erfordert eine Kennworteingabe.

Wenn Du das wirklich mit root rechten laufen lassen willst log dich als root ein und schreib das script in seine crontab, dann brauchst auch kein sudo ;)

mmhh das ist komisch, denn mit genau dem Script lief das Backup bisher. Naja bis es halt nicht mehr funktioniert :)

Wie kann ich dort mein Kennwort hinterlegen?

Grüße
robb
 
Soweit ich weiss geht das über den sudo Befehl in einer Kommandozeile gar nicht, sondern nur über dessen Konfigurationsdatei /etc/sudoers. Dort kann man z.B. hinterlegen das Benutzer X den rsync Befehl ohne Eingabe eines Kennworts mit sudo ausführen kann. Wie genau das geht bekommt man über die Beispiele in der Datei raus oder über google ;)

Ich würde die Kennworteingabe nicht für alle Befehle ausschalten, ist einfach zu gefährlich ;)
 
...
Wenn Du das wirklich mit root rechten laufen lassen willst log dich als root ein und schreib das script in seine crontab, dann brauchst auch kein sudo ;)
Das ist absolute nicht nötig. Man kann die crontab ganz einfach mit sudo editieren. Dazu muss man weder root aktivieren noch sich als root einloggen.
 
T'schuldigung, das meinte ich damit. Falsch ausgedrückt :eek: Oder man nutzt ein GUI Tool wie Cronnix.
 
Ich würde mal damit anfangen, "echo" Kommandos mit Ausgabeumleitung in das Skript einzubauen, um sicher festzustellen, ob es wirklich nicht aufgerufen wird.
 
Ich würde mal damit anfangen, "echo" Kommandos mit Ausgabeumleitung in das Skript einzubauen, um sicher festzustellen, ob es wirklich nicht aufgerufen wird.

Wie wird denn dann der Echo angezeigt? Bzw. wie würde der Einbau ins Script aussehen?
 
echo "Bis hier funktioniert das Skript noch" >> /pfad/zur/logdatei
 
Es hat jetzt einmal geklappt, danach allerdings nie wieder, ich versteh es nicht :(

Hier mein Script:
Code:
#!/bin/sh

RSYNC=/usr/bin/rsync

echo "Bis hier funktioniert das Skript noch" >> "/Users/robb/Documents/Backups/Rsync/rsync.log"

if [ -f '/Volumes/Backup/Bilder/20081014/photocase2dgzpvu9brvj.jpg' ] 
then
	echo "Los gehts!" >> "/Users/robb/Documents/Backups/Rsync/rsync.log"
	sudo $RSYNC -a -x -S --progress --exclude-from "/Users/robb/Documents/Backups/Rsync/ausnahmen.txt" $* --delete "/Volumes/Extern/" "/Volumes/Backup/" > "/Users/robb/Documents/Backups/Rsync/rsync.log"
else
	echo "Backup-Platte nicht gefunden!" >> "/Users/robb/Documents/Backups/Rsync/rsync.log"
fi

Eben hat er einmal "Bis hier funktioniert das Skript noch" ins Log geschrieben. Danach fing das Backup an und jetzt passiert wieder gar nichts.

An dem "zuletzt geändert" kann ich aber ablesen, dass das Log regelmäßig beschrieben wird, nur halt ohne Inhalt.

Die beiden Platten unterscheiden sich auch, er müsste längst anfangen Dateien zu kopieren.
 
Also in die IF Abfrage komme ich nun rein, mein Echo wird ins Log geschrieben :)

Jetzt habe ich nur noch das Problem, dass mein Script nicht angestoßen wird.

Der Code bisher
Code:
#!/bin/sh

RSYNC=/usr/bin/rsync

if [ -f '/Volumes/Extern/Bilder/20081101/DSCF0019.dng' ] 
then
	sudo $RSYNC -a -x -S --progress --exclude-from "/Users/robb/Documents/Backups/Rsync/ausnahmen.txt" $* --delete "/Volumes/Extern/" "/Volumes/Backup/" > "/Users/robb/Documents/Backups/Rsync/rsync.log"
	echo "Los gehts!" >> "/Users/robb/Documents/Backups/Rsync/rsync.log"
else
	echo "Backup-Platte nicht gefunden!" >> "/Users/robb/Documents/Backups/Rsync/rsync.log"
fi
 
Jetzt hast ja immer noch die 'sudo' Kommados in Deinem Skript.
Wozu?
Wenn das Skript mit root Rechten laufen soll, gehört es über die root crontab (/etc/crontab) gestartet.
Das sudo kannst Du dann weglassen.
 
Jetzt hast ja immer noch die 'sudo' Kommados in Deinem Skript.
Wozu?
Wenn das Skript mit root Rechten laufen soll, gehört es über die root crontab (/etc/crontab) gestartet.
Das sudo kannst Du dann weglassen.

Also ich bin mir nicht sicher, ob ich dir folgen kann. Als erstes benötige ich kein Sudo im Script mehr, richtig? Also:
Code:
#!/bin/sh

RSYNC=/usr/bin/rsync

if [ -f '/Volumes/Extern/Bilder/20081101/DSCF0019.dng' ] 
then
	$RSYNC -a -x -S --progress --exclude-from "/Users/robb/Documents/Backups/Rsync/ausnahmen.txt" $* --delete "/Volumes/Extern/" "/Volumes/Backup/" > "/Users/robb/Documents/Backups/Rsync/rsync.log"
else
	echo "Backup-Platte nicht gefunden!" >> "/Users/robb/Documents/Backups/Rsync/rsync.log"
fi

Dann muss ich den Cronjob als Root einrichten?

Also im Terminal dann so etwas wie "root crontab -e" schreiben und meinen cronjob erstellen? -> 30 * * * * sh /Users/robb/Documents/Backups/Rsync/backup.command

Oder habe ich das falsch verstanden?
 
Code:
sudo vi /etc/crontab
(oder anstelle von vi eben den Editor, den Du verwendest)

Das Script speicherst Du lieber außerhalb des Benutzerordners von /Users/robb.
Sinnvoll wäre z.B. das Verzeichnis /usr/local/bin dafür anzulegen:
Code:
mkdir -p /usr/local/bin
 
Code:
sudo vi /etc/crontab
(oder anstelle von vi eben den Editor, den Du verwendest)

Das Script speicherst Du lieber außerhalb des Benutzerordners von /Users/robb.
Sinnvoll wäre z.B. das Verzeichnis /usr/local/bin dafür anzulegen:
Code:
mkdir -p /usr/local/bin

Habs mal mit "sudo vi /etc/crontab" versucht. VI ist der Standardeditor für Cronjobs? Wie dem auch sei, ich kann den Job nicht speichern. In der Liste drücke ich "i" und füge meinen Job hinzu. Danach "Esc" und "Shift" und zwei mal "Z". Er verlässt den Editor, sagt aber nicht, das ein neuer Cronjob erstellt wurde.

Ausgeführt wird der Job dann leider auch nicht :(
 
Hilfe, Hilfe, ich habs doch fast geschafft :)

Kann nicht jemand einen armen Idioten wir mir den letzten und entscheidenden Tipp geben, meine Backups wieder zum laufen zu bekommen?
 
Zurück
Oben Unten