2017-10-13 2 views
0

Ich habe ein Shell-Skript-Cron, das ein Python-Skript aus dem gleichen Verzeichnis aufruft, aber wenn dieses Cron ausgeführt wird, erwarte ich keine Ausgabe von meinem Python-Skript und wenn ich es manuell ausführen mein Python Die Ausgabe des Skripts ist wie erwartet.Aufruf eines Python-Skripts aus Shell-Skript cron

Ich habe Python-Skript Pfade zur Verfügung gestellt wie /usr/bin/python room_wise.py

und alle Shell params in Shell-Skript als auch gegeben, aber immer noch mein Python-Skript wird nicht mit dem Shell-Skript cron aufgerufen.

Kann mir hier jemand helfen?

+1

Haben Sie versucht, '/ usr/bin/python/Pfad/to/room_wise.py'? – Nepho

+0

Ja @Nepho, ich habe beide Dinge versucht, – Sid

+0

Ist die Ausgabe von 'welche Python'/usr/bin/Python wie erwartet? – Nepho

Antwort

0

Das große Problem bei Cron-Jobs sind die absoluten Verzeichnispositionen und relativen Verzeichnispositionen. Sie müssen den relativen Pfad zuerst wie gezeigt teilen.

#!/usr/bin/env bash 
dirName=`dirname $0` 
baseName=`basename $0` 
arg1=$1 
arg2=$2 
cd ${dirName} && python ./room_wise.py arg1 arg2 

Dann crontab -e verwenden, um Elemente Ihren Benutzer Cronjobs hinzuzufügen und die folgende hinzu:

PATH=/usr/bin:/bin:/sbin 
30 00 * * * /my/directory/containing/room_wise_py.sh arg1 arg2 > /my/directory/containing/output.log 2>&1 

Sie können sehen, dass ich den Pfad hinzugefügt haben, da dies manchmal ein Problem sein kann mit bestimmte Betriebssystemverteilungen. Außerdem befindet sich das Skript im selben Verzeichnis wie das Bash-Skript, oder Sie können den Speicherort des Verzeichnisses als Argument übergeben, wenn Sie das Bash-Skript so ändern, dass es dirname als $ 1 enthält.

Auch Sie können sehen, dass ich alle Ausgabe in eine Protokolldatei geleitet habe. Dies ist eine wirklich gute Idee, da es manchmal sehr schwierig ist, den Prozess zu debuggen, wenn etwas schief geht.

+0

Denken Sie daran, #!/Usr/bin/env python am Anfang Ihres Python-Skripts hinzuzufügen, wenn Sie dies noch nicht getan haben. Dies ist auch ein wichtiger Aspekt, um beim Ausführen von Software aus Bash-Skripten in Cron richtig zu machen. –

+0

Was macht die Linie '2> & 1' am Ende des Rohres? –