Python in SU cron gibt verschiedene Ausgabe als manuell Ausführung
Frage
Ubuntu Server 9.10, Hier ist meine Datei, test.py
import commands
blkid = commands.getoutput('blkid')
print blkid
Wenn ich manuell ausführen (wie SU) folgt aus:
python test.py
bekomme ich die Ausgabe des blkid wie erwartet:
/dev/sda1: UUID="3f0ac5bb-f0da-4574-81f5-77844530b561" TYPE="ext4"
/dev/sda5: UUID="67df0e7c-74fb-47dd-8520-ad720fbed67d" TYPE="swap"
/dev/sdb1: UUID="85466892-8dae-461c-95da-b8f91c2e766b" TYPE="ext3"
/dev/sdc1: UUID="91b84635-21c2-4d9a-84f8-2bbaab16d41f" SEC_TYPE="ext2" TYPE="ext3"
/dev/sdd1: UUID="6a52c830-0029-4154-80cb-f17274eb6fed" SEC_TYPE="ext2" TYPE="ext3"
Allerdings, wenn ich In meiner SU crontab:
* * * * * python /home/myusername/test.py > /home/myusername/output
Der Inhalt von Ausgang wird:
sh: blkid: not found
Was bin ich hier? Ist Python Befehle Modul nur für bestimmte SH-spezifische Befehle? Ich versuche einfach, ein System Befehl auszuführen und die Ausgabe in eine Variable zu erfassen, dass ich analysieren kann.
Lösung
Das Problem ist wahrscheinlich mit Ihrem $PATH
im Vergleich zu der Wurzel (os.environ['PATH']
wenn man es in Python freuen anstatt Shell ist ;-). Wurzel PATH ist in der Regel sehr konservativ (es riskant wäre, es nicht zu sein!) und da Sie blkid
laufen lassen, ohne einen absoluten Pfad angeben, dass bedeuten kann, leicht, dass es auf dem Weg ist, aber nicht die Wurzel.
So tun which blkid
wie sie an einem Shell-Prompt sudo su
oder sowieso mit Root und echo $PATH
- Sie schnell das Problem überprüfen können. Dann sind Sie sie beheben, indem blkid absoluten vollständigen Pfad im getoutput
-Aufruf nicht nur die bloße Kennung blkid
, wie Sie jetzt tun.
Andere Tipps
Die Umwelt (und PATH) eines Cron-Job ist nicht unbedingt die gleiche wie Ihre Login-Shell.