# crontab: Problem mit Scriptausführung



## haraldSol (3. März 2011)

Hallo Zusammen,

ich hoffe hier im Forum kann mir jemand helfen, denn ich bin so langsam am verzweifeln...

Folgendes Problem / Aufgabenstellung:

Ein Script soll eine Datei *.gz per http downloaden und anschließend entacken und convertieren. Das ganze soll automatisiert ablaufen per crontab.

Wenn ich dieses Script nun manuell starte, läuft es durch und alles funktioniert.

Per crontab läuft noch der Download korrekt ab, aber entpacken funktioniert schon nicht, da hier vermutlich, aufgrund der anderen Umgebung im crontab, ein Problem auftritt. Wird der Download und das Entpacken in zwei unterschiedlichen Cronjobs nacheinander ausgeführt, läuft alles. Das Skript soll aber in einem einzigen crontab ausgeführt werden, somit kommt das in als Lösung in frage.
Das Problem liegt vermutlich daran, dass auf die heruntergeladene Datei wohl nicht korrekt zugegriffen werden kann. Auch ein sync-Befehl nach dem Download und ein sleep brachte keinen Erfolg.

Als Problemlösung habe ich versucht dass sich der Cronjob per ssh auf user01@localhost connected, jedoch gleicher Fehler. Manuell funktioniert alles wieder. Per atjob habe ich auch wieder den gleichen Fehler.

hier der crontab (wird von einem user ausgeführt / nicht root):

```
SHELL=/bin/bash

# m h  dom mon dow   command
30 02 * * * /home/user1/script/start.sh
#------------------------
```

hier mein Script:

```
#!/bin/bash

cd /home/user1/script/workfolder

echo "$(date +%Y%m%d%H%M%S) RUN...start downloading now..." >> /var/www/output/log/$(date +%Y%m).log

wget http://*.*.*.*/pub/latest.gz -O latest_$(date +%Y%m%d).gz

echo "$(date +%Y%m%d%H%M%S) OK...download complete!" >> /var/www/output/log/$(date +%Y%m).log

echo "$(date +%Y%m%d%H%M%S) RUN...start unzipping now..." >> /var/www/output/log/$(date +%Y%m).log

/bin/gzip -dfv latest_$(date +%Y%m%d).gz

echo "$(date +%Y%m%d%H%M%S) RUN...converting files now..." >> /var/www/output/log/$(date +%Y%m).log

/usr/local/bin/converttool-1.554.1/convert latest_$(date +%Y%m%d) -O latest_$(date +%Y%m%d).txt

mv latest_$(date +%Y%m%d).txt /var/www/output

echo "$(date +%Y%m%d%H%M%S) OK...success" >> /var/www/output/log/$(date +%Y%m).log
```


----------



## deepthroat (3. März 2011)

Hi.

Finde heraus welche Fehler auftreten!

Modularisierung wäre eine gute Idee, schreibe eine Funktion für das Logging. Verwende eine Variable für die Dateinamen statt ständig $(date ...) aufzurufen.

Breche die Ausführung des Skriptes ab wenn ein Fehler auftritt:

```
LOGFILE=/var/www/output/log/$(date +%Y%m).log

function error() {
  echo "ERROR - $(date ...) - $1" >> "$LOGFILE"
  exit 1
}
...
wget http://... -O .. || error "downloading failed"
gzip -dfv ... || error "decompress failed"
...
```
Wenn das Skript mit einem Fehler beendet, solltest du auch eine Mail mit der Fehlermeldung bekommen. Ansonsten, leite alle Fehler in eine Log-Datei um:

```
exec 2>> error.log
```
Gruß


----------



## haraldSol (4. März 2011)

Vielen dank füre die Hilfe ich werde es mal versuchen---
Schönes Wochenende


----------

