Fehlerbehandlung im cronjob scheitert

10/04/2011 - 12:32 von Marco Lorig | Report spam
Hallo,

ich stehe ein wenig auf dem Schlauch:

Thema: Cronjob rsync bash-Skript mit anschließender Auswertung von $?
des rsync-Kommandos innerhalb des Skripts.

Problem:

Skriptauszug von der relevanten Stelle:
0 #!/bin/bash
1 rsync [viele Parameter] >> $LOG
2 ERRORLEVEL=$?
3 echo $ERRORLEVEL >> $LOG # Debug Ausgabe
4
5 if [ $ERRORLEVEL == "0" ]; then
6 echo "Backup wurde erfolgreich um `date +%H:%M`Uhr beendet." >>$LOG
7 rm $LOCK
8 else
9 echo "Backup ist fehlgeschlagen um `date +%H:%M`Uhr." >>$LOG
10 rm $LOCK
11 fi


Rufe ich das Skript von Hand auf, klappt die Fehlerbehandlung.
Zeile 3 schreibt je nach Status den richtigen Wert in die Logdatei
Ebenso funktioniert die IF-Schleife ab Zeile 5 einwandfrei & korrekt.

Lasse ich das Skript von CRON starten, liefert Zeile 3 immernoch den
korrekten Wert und schreibt diesen in die LOG-Datei.

Die nachfolgende IF-Schleife ab Zeile 5 funktioniert allerdings nicht
mehr korrekt.
Ich erhalte immer den Output ab Zeile 9 (sprich, die Prüfung in Zeile 5
schlàgt immer fehl, egal welcher Wert in $ERRORLEVEL steht]

Hat jemand eine Idee, was CRON an der Stelle anders macht und vorallem
"warum"?

Grüße Marco
 

Lesen sie die antworten

#1 Thomas Noll
10/04/2011 - 13:07 | Warnen spam
Marco Lorig wrote:

Hallo,

ich stehe ein wenig auf dem Schlauch:

Thema: Cronjob rsync bash-Skript mit anschließender Auswertung von $?
des rsync-Kommandos innerhalb des Skripts.

Problem:

Skriptauszug von der relevanten Stelle:
0 #!/bin/bash
1 rsync [viele Parameter] >> $LOG
2 ERRORLEVEL=$?
3 echo $ERRORLEVEL >> $LOG # Debug Ausgabe
4
5 if [ $ERRORLEVEL == "0" ]; then
6 echo "Backup wurde erfolgreich um `date +%H:%M`Uhr beendet." >>$LOG
7 rm $LOCK
8 else
9 echo "Backup ist fehlgeschlagen um `date +%H:%M`Uhr." >>$LOG
10 rm $LOCK
11 fi
[...]
Hat jemand eine Idee, was CRON an der Stelle anders macht und vorallem
"warum"?



Vermutlich wird nicht die bash verwendet.
Ich würde erstmal

if [ "$ERRORLEVEL" = "0" ]; then
oder
if [ $ERRORLEVEL -eq 0 ]; then

probieren.

Woo Hoo Woo Hoo Hoo

Ähnliche fragen