Python-Skript zum Herunterfahren des Systems funktioniert in Cron nicht

Python-Skript zum Herunterfahren des Systems funktioniert in Cron nicht

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:/binfü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 PATHin Ihrer Crontab einen entsprechenden Wert festlegen:

#!/bin/env python

Wie sieht Ihr Crontab-Eintrag aus? Vergessen Sie nicht, dass dadurch croneine sehr eingeschränkte Umgebung festgelegt wird. Sie müssen daher den vollständigen Pfad zur Skriptdatei angeben, damit crondiese gefunden werden kann.

Darüber hinaus kann Python wahrscheinlich nicht finden , shutdownwenn es von aufgerufen wird , da es die eingeschränkte Umgebung von cronerbt . Versuchen Sie, in Ihrem Aufruf den vollständigen Pfad zum Befehl anzugeben.cronshutdownos.system()

verwandte Informationen