
Ein Python-Skript zum Herunterfahren des Systems funktioniert vom Terminal aus einwandfrei, funktioniert aber nicht, wenn es in crontab eingebunden wird. Das Skript wird von cron aufgerufen, endet aber mit einem Fehler 'Shutdown-Befehl nicht gefunden'oder 'Init 0-Befehl nicht gefunden'. Ich verwende Fedora 17 und das Skript wird von der Crontab des Root-Benutzers ausgeführt.
#!/usr/bin/python
import os
os.system('shutdown')
os.system('init 0')
Antwort1
Ihr PATH entspricht nicht Ihren Erwartungen. Laut der (Debian-Version der) crontab(5)-Manpage ist die Umgebungsvariable PATH /usr/bin:/bin
für Programme, die von cron ausgeführt werden, auf eingestellt. Sie können dies ändern, indem Sie PATH=
oben in Ihrer crontab eine Zeile hinzufügen, zum Beispiel:
PATH=/usr/sbin:/sbin:/usr/bin:/bin
Dadurch wird der Pfad für alle Crontab-Einträge unterhalb der PATH=-Zeile bis zur nächsten PATH=-Zeile geändert. Siehe diecrontab(5)Weitere Einzelheiten finden Sie auf der Manpage.
Antwort2
Ich schätze, die erste Zeile Ihres Snippets sollte ungefähr so lauten:
#!/usr/local/bin/python
oder, wenn Sie auch sicherstellen, dass Sie PATH
in Ihrer Crontab einen entsprechenden Wert festlegen:
#!/bin/env python
Wie sieht Ihr Crontab-Eintrag aus? Vergessen Sie nicht, dass dadurch cron
eine sehr eingeschränkte Umgebung festgelegt wird. Sie müssen daher den vollständigen Pfad zur Skriptdatei angeben, damit cron
diese gefunden werden kann.
Darüber hinaus kann Python wahrscheinlich nicht finden , shutdown
wenn es von aufgerufen wird , da es die eingeschränkte Umgebung von cron
erbt . Versuchen Sie, in Ihrem Aufruf den vollständigen Pfad zum Befehl anzugeben.cron
shutdown
os.system()