Crontab Backup Problem



LabSen

Member
Hallo zusammen

Ich habe ein schönes kleines Script gefunden das für mich im Moment die Backups ausführt. Leider will das ganze noch nicht so ganz per crontab funktionieren.

Laut logs wird er ausgeführt: Dec 27 03:27:02 v24590810 /USR/SBIN/CRON[30923]: (root) CMD ( cd /root && ./backup.sh)

In der Datei crontab sieht es so aus: 27 3 * * * root cd /root && ./backup.sh

Aber es wird nie ein Backup angeleht. Wenn ich das ganze aber per Hand ausführe klappt es ohne Probleme.

Habe hier noch das Script:

Code:
#!/bin/bash
#
# Backupscript
# This Script ist Freeware GPL
#
# Autor MrJung  hmbsd by web.de
#
#########################
BACKUPDIR="/backup"  #local
RBACKUPDIR="/" # remote
FTPSERVER=sdfsadf
MYUSER=sdafsadf
MYPASS=sadfsadf
FUSER=sdfasdf
FPASS=ssafdsd
##########################

# Wochentag abfragen
WOTAG=`date +%a`
WOTAG1=`date +%A`
DTIME=`date +%H%M`

# Was war Gestern
if [ $WOTAG1 = "Montag" ]; then
     DEL="Sa"
elif [ $WOTAG1 = "Dienstag" ]; then
     DEL="So"
elif [ $WOTAG1 = "Mittwoch" ]; then
     DEL="Mo"
elif [ $WOTAG1 = "Donnerstag" ]; then
     DEL="Di"
elif [ $WOTAG1 = "Freitag" ]; then
     DEL="Mi"
elif [ $WOTAG1 = "Samstag" ]; then
     DEL="Do"
elif [ $WOTAG1 = "Sonntag" ]; then
     DEL="Fr"
else
exit 1
fi
# verzeichnisse anlegen
mkdir -p /$BACKUPDIR/$WOTAG/mysql
mkdir -p /$BACKUPDIR/$WOTAG/var
mkdir -p /$BACKUPDIR/$WOTAG/home
mkdir -p /$BACKUPDIR/$WOTAG1
# sycronisieren
if ( test -d /$BACKUPDIR/$WOTAG ) then
rsync -az  --delete --delete-after /var /$BACKUPDIR/$WOTAG
rsync -az  --delete --delete-after /etc /$BACKUPDIR/$WOTAG
rsync -az  --delete --delete-after /home /$BACKUPDIR/$WOTAG
else
echo ""
fi

# MySql Dump erstellen
if ( test -d /$BACKUPDIR/$WOTAG/mysql ) then
  cd /$BACKUPDIR/$WOTAG/mysql
  mysqldump -AaCceQ -u$MYUSER -p$MYPASS -r mysql.dbs
else
echo ""
fi

ALL=$WOTAG"_all"
# Tar File erstellen
  cd /$BACKUPDIR/$WOTAG
  tar czf /$BACKUPDIR/$WOTAG1/$WOTAG1.mysql.$DTIME.tar.gz mysql
  tar czf /$BACKUPDIR/$WOTAG1/$WOTAG1.var.tar.gz var
  tar czf /$BACKUPDIR/$WOTAG1/$WOTAG1.etc.tar.gz etc
  tar czf /$BACKUPDIR/$WOTAG1/$WOTAG1.home.tar.gz home
  cd /$BACKUPDIR/
  tar czf /$BACKUPDIR/$ALL.$DTIME.tar.gz $WOTAG1
  rm -r /$BACKUPDIR/$WOTAG1* || echo ""

# Backup erstellen
cd /$BACKUPDIR
ncftpput  -u $FUSER -p $FPASS $FTPSERVER /$RBACKUPDIR/ *$DTIME*
rm -r /$BACKUPDIR/$DEL

exit 0
#
#
#
 
Ich würde mal auf das kanonische Problem tippen. Innerhalb der Cron-Umgebung ist die PATH-Variable nur sehr minimalistisch gesetzt und daher werden Teile des Scripts nicht gefunden. Dementsprechend sieht die Lösung auch kanonisch aus:
Absolute Pfade verwenden oder die PATH-Variable entsprechend setzen.
Generell gilt: Wenn man die MAILTO-Variable richtig gesetzt hat, bekommt man die ganzen Fehlermeldungen bequem nach Hause geschickt.
 
Wie oben bereits erwähnt, liegt es daran, daß die Shellbefehle nicht erkannt werden.

Aus diesem Grund schreibe ich zu Beginn eines Shellskriptes alle verwendeten Befehle in Variablen rein. Bsp.:

CD=/usr/bin/cd

$CD ...

Ich nehme an, Dein Skript ist für den entsprechenden User ausführbar?
 
Wusste doch das damit was nicht stimmen konnte. Habe nämlich kein cd, mkdir etc. gefunden^^

Mit welchen "Pfaden" kommt den der cron nicht klar. bzw. welche werden empfohlen zu setzten?
Mailto ist gesetzt. Habe von einem anderen Script auch ne Mail gekriegt (Dadurch den Fehler gefunden). Aber bei diesem Backup Script kommt keine. Habe ich da noch was vergessen zu setzten?
 
Hallo zusammen

Also ich habe mal ein bischen weiter getestet. Habe den kompletten Pfad von mysqldump, ncftpput und rsync angegeben (alle in usr/bin). Ich denke von cd, mkdir und tar muss man keine angeben bzw. habe ich gar keine gefunden. Von Hand klappt immer noch alles ohne Probleme. Per Crontab aber leider immer noch nicht. Das Script wird von crontab aufgerufen aber es passiert einfach nichts... :(

Hoffe da hat jemand noch ein paar Tipps.
 
Mal ein genereller Tipp:
Change:
Code:
27 3 * * * root cd /root && ./backup.sh
to:
Code:
27 3 * * * root /root/backup.sh

Ist die backup.sh ausführbar? (chmod +x /root/backup.sh)
Wenn nicht:
Code:
27 3 * * * root /bin/sh /root/backup.sh
 
Back
Top