Cronjob

F

Freehawk

Jungspund
Hallo zusammen,

ich habe irgendwie Probleme mein Backup-Script mittels cronjob zu starten.

Ich habe schon einiges ausprobiert.

Ich hab den Job unter /etc/crontab eingetragen und zwar so wie es hier im Forum schon öfters erklärt wurde.

Ich habe den Job mit dem Befehl crontab probiert einzutragen.

Der cron Deämon läuft auch das hab ich mit cron status getestet und den habe ich auch öfters neu gestartet.

An was kann das noch liegen? Distri ist übrigens SUSE 10.0.

Ich hoffe Ihr könnt mir weiterhelfen!

DANKE

Gruß
Markus
 
Hallo,

kannst du einen Syntaxfehler ausschließen?
Ansonsten poste doch bitte mal den Cronjob.

Grüße KRiusd
 
Hallo,

wie auch schon hier öfters erwähnt Mail der cron bei einer Ausgabe,
egal ob Stdout oder Stderr - also solltest Du vor allem mal die Mails
des Users checken, dessen crontab Du editiert hast.
Ein Blick in /var/log/messages hat auch so manchmal schon geholfen *g

Ansonsten schließe ich mich meinem Vorredner an - bitte mal die Ausgabe
von crontab -l posten!
 
Wenn der Cronjob nicht ausgeführt wird, aber das gleiche Script in der Shell funktioniert, ist zu 99% der fehlende Pfad schuld.
Ein Cronjob läuft nicht in der gleichen Umgebung wie in der Shell!
Also entweder die angebotene Lösung des cron selbst nutzen, oder im Script den Pfad selbst definieren bzw. alle Programme mit vollem Pfad aufrufen.

Gruß Wolfgang
 
So Hallo,

also hier mal mein Script. Das mit der Pfaden zu den Kommandos hab ich auch gelesen und da hat es geheißen ich muss oben die PATH Variable angeben. Das habe ich auch gemacht.

Code:
#!/bin/bash

# geschrieben von Markus Rost
# Version 0.5 - in Entwicklung

# Dies ist ein automatisches Backup-Script
# in der Datei die in $paradat angegeben wird
# muss in der ersten Zeile der Ablageort der
# tar-Archive angegeben werden. Die Pfade muessen
# unbedingt mit / aufhoeren. In der zweite
# Zeile die Anzahl der Sicherung die erhalten
# bleiben sollen. In der dritten Zeile die eMail-
# Addresse des Systemadministrators und darunter
# die Pfade die gesichert werden sollen.
# Unter $countdat wird die Datei fuer den internen
# Counter abgelegt

# Pfade setzten
PATH=/sbin:/bin:/usr/bin:/usr/sbin:/usr/bin/X11:

# Variablen Definition:

# Ablageort und Name der Parameterdatei
paradat=./parameter.txt

# Ablageort und Name der Counterdatei
countdat=/tmp/.count

# Ablageort und Name temporaeen Datei 
liste=/tmp/.liste
error=/tmp/.error


# Script-Code:

# Ueberpruefen ob eine $paradat vorhanden ist wenn
# nicht wird eine Mail abgesetzt und das Script beendet
if [ ! -s $paradat ] ; then
  t1="Sie haben keine Parameterdatei angegeben."
  t2="Deshalb konnte das Script nicht ausgeführt werden."
  t3="Bitte geben Sie ein Parameterdatei an!"
  echo $t1 $t2 $t3 | mail -s "Ihr Backup Script" $mail
  exit 1
fi

# Ueberpruefen ob eine $countdat vorhanden ist
# wenn nicht eine anlegen und 1 reinschreiben
if [ ! -r $countdat ] ; then
  echo 1 > $countdat
fi

# einlesen des Inhalts von $countdat in $count
count=`more $countdat`

# einlesen des Inhalts von $paradat
# Inhalt wird in $i ausgeben
n=0
for i in $(cut -d: -f1 $paradat); do
  n=$(( $n + 1 ))

# Auslesen der ersten Zeile und verschieben in $ziel
  if [ $n == 1 ] ; then
    ziel=$i

# Ueberpruefen ob Zielverzeichnis vorhanden ist
# wenn nicht wird das Verzeichnis angelegt
    if [ ! -d $ziel ] ; then
      mkdir $ziel
    fi
  fi

# Auslesen der zweiten Zeile und verschieben in $anzahl
  if [ $n == 2 ] ; then
    anzahl=$i
  fi

# Auslesen der dritten Zeile und verschieben in $mail
  if [ $n == 3 ] ; then
    mail=$i
  fi

# Auslesen der sonstigen Zeilen und verschieben in $para
  if [ $n -ge 4 ] ; then
    para=$i
    cd $ziel  

# Ueberpruefen ob jetztige Verzeichnis vorhanden ist
# (Nummer aus $countdat)
    if [ ! -d $count ] ; then
      mkdir $count
    fi

# tar-Befehl zum Packen der Dateien absetzten
# Dateinamen ist Schleifenzaehler + .tar.gz
# Fehler werden in ein Datei geschrieben
    cd $para
    tar -czf $ziel$count/$n.tgz * 2>>$error 
  fi

done

# Zahl in $count + +1 und in $countdat ablegen
count=$(( $count + 1 ))
echo $count > $countdat

# Verzeichnis $ziel auslesen und in $liste schreiben
cd $ziel
ls > $liste

# Errechnen welche Ordner zu alt sind
  loesche=$(( $count - $anzahl ))

# zeilenweises Einlesen der Datei $liste
n=0
for i in $(cut -d: -f1 $liste); do
  n=$(( $n + 1 ))

# Vergleichen welche Ordner geloescht werden sollen
# und diese loeschen
  if [ $i -lt $loesche ] ; then
    rm -r $i
  fi

done

# Loeschen der Hilfsdatei $liste
rm $liste

# Beenden des Scriptes
# und absetzen einer Erfolgsmail oder einer Mail
# mit Fehlermeldungen vom TAR-Befehl
if [ ! -s $error ] ; then
  t1="Backup Script erfolgreich ausgeführt!"
  t2=`date`
  echo $t1 $t2 | mail -s "Ihr Backup Script" $mail
  exit 0
else
  t1=`more $error`
  echo $t1 | mail -s "Ihr Backup Script" $mail
  rm $error
  exit 1
fi

und in der CRONTAB habe ich das so angegeben:

Code:
1 0 * * * /root/scripte/backup/backup

Ich meine mal das müsste so passen, aber wissen tu ich das nicht.

Ich bin mal gespannt was ich falsch gemacht habe.

Gruß
Markus
 
Genau...und die gibts entweder per "mail" oder "less /var/log/messages"...
 
Das ist ja das seltsame ich kann in den Mails und in den messages nichts finden.

Gruß
Markus
 
Auf was ist denn mail in der Crontab gesetzt?

Desweiteren ist das keine Option die eine Mail erzeugt:
if [ ! -s $paradat ] ; then
t1="Sie haben keine Parameterdatei angegeben."
t2="Deshalb konnte das Script nicht ausgeführt werden."
t3="Bitte geben Sie ein Parameterdatei an!"
echo $t1 $t2 $t3 | mail -s "Ihr Backup Script" $mail
exit 1
fi

$mail ist zu diesem Zeitpunkt undefiniert.
Also geht an dieser Stelle auch keine Mail vom Skript aus weg.
Es stirbt leise...

Was passiert denn in der Shell, wenn du das selber startest?

Gruß Wolfgang
 
Hallo Wolfgang,

wenn ich es Shell aufrufe wird keine mail abgesetzt stimmt. Aber die Parameterdatei ist vorhanden.

Also müsste das Script ja weiterlaufen.

Wenn ich nur in der Shell das Script aufrufe, dann funktioniert alles.

Es wird nämlich auch kein Prozess erzeugt zu dem Zeitpunkt wo das Script laufen sollte.

Gruß
Markus
 

Ähnliche Themen

NAS-Drive Mount in Bash-Script über crontab

Logs löschen von einer Jumstation aus via ssh auf versch. Hosts

Cronjob mit Root-Rechten

Filesystem von Truecrypt-Container beschädigt !?

cronjob unter cygwin

Zurück
Oben