linux crontab führt bash shell script nicht richtig aus?

4 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

Das liegt daran, dass der Aufruf des Skripts jeweils von anderen Arbeitsverzeichnissen aus geschieht. Rufst du das Skript manuell mit

./philips.sh

auf, dann ist das Arbeitsverzeichnis, sofern du den absoluten Pfad in der Crontab richtig angegeben hast:

/home/vmfr/philips

Der Cronjob wird zwar unter Voranstellung des absoluten Pfades, jedoch immer aus dem Arbeitsverzeichnis

/home/$USER

aufgerufen. Dabei ist $USER der Benutzer, mit dem du die Crontab bearbeitet hast, in deinem Fall vermutlich vmfr. Da du im Skript selbst keine absoluten Pfade angegeben hast, werden Verzeichnisse und Dateien beim Cronjob an anderer Stelle erzeugt, als bei manuellem Aufruf. Was ich auch nicht verstehe: warum hast du die Underscores hier

sicherung=Sicherungen\_Philips\_mdm

auskommentiert? Das hast du hier

done < <(find . -name "*.mdm" -exec cp '{}' Sicherungen_Philips_mdm/ \; )

ja auch nicht getan, und ist auch nicht notwendig. Also: ich gehe mal davon aus, dass das Verzeichnis Sicherungen_Philips_mdm unterhalb von /home/vmfr/philips angelegt werden soll, und dass sich auch die Dateien Simple_XML_HLSeven_Converter.py und HL7_Generator.py in diesem Verzeichnis befinden. Dann würde ich vorschlagen, das Skript wie folgt abzuändern:

#!/bin/bash
echo 'philipstestausgabe'
standort=/home/vmfr/philips
sicherung=Sicherungen_Philips_mdm
mkdir -p $standort/$sicherung
array=()
while IFS= read -r -d $'\0'; do
   array+=("$REPLY")
done < <(find $standort -name "*.mdm" -exec cp '{}' $standort/Sicherungen_Philips_mdm/ \; )
for var in "${array[@]}"
do
python3 $standort/Simple_XML_HLSeven_Converter.py $var $standort/$sicherung
python3 $standort/HL7_Generator.py $var $standort/$sicherung
done

Dann sollte es bei manuellem Aufruf und beim Aufruf per Cron gleichermaßen funktionieren.

In Cron gibt es keine (oder eine andere) Path-Variable. Zu allen Programmen und Pfaden musst du also den absoulten Pfad angeben (also vom Root aus).

Im Falle von Python wäre dies dann /usr/bin/python3

Woher ich das weiß:eigene Erfahrung – Nutze Linux täglich, sowohl auf Server als auch Desktop
Von Experte guenterhalt bestätigt
sicherung=Sicherungen\_Philips\_mdm

Verwendest du auch absolute Pfade? Im Cronjob ist es gut möglich, dass der Quellpfad ein anderer ist, sodass die Pfade nicht korrekt sind.

hast du den crobtab über den befehl crontab -e editiert?
oder bist du im ordner cron.d (oder cron.daily etc)

ersteres könnte probleme haben weil ggf der sudo fehlt
zweiteres dürfte Probleme haben weil der Nutzer der den Befehl ausführt fehlt