2012-11-06 19 views
7

crontab schlägt fehl, ein Python-Skript auszuführen. Die Befehlszeile, die ich verwende, um das Python-Skript auszuführen, ist in Ordnung.Crontab kann Python-Skript nicht ausführen

Diese sind Lösungen hatte ich versucht:

  • hinzufügen #!/usr/bin/env python an der Spitze des main.py
  • hinzufügen PATH=/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin an der Spitze crontab
  • chmod 777 zum main.py Datei
  • service cron restart

meine crontab ist:

PATH=/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin 

*/1 * * * * python /home/python_prj/main.py 

und das Protokoll in/var/log/syslog ist:

Nov 6 07:08:01 localhost CRON[28146]: (root) CMD (python /home/python_prj/main.py) 

und nichts anderes.

Das Skript main.py ruft einige Methoden aus anderen Modulen unter python_prj auf, ist das wichtig?

Jeder kann mir helfen?

+0

Haben Sie "/ usr/bin/env/python /home/python_prj/main.py" in Ihrem Cron-Befehl ausprobiert? – Tjaart

+1

Vielleicht stürzt Ihr Skript ab, bevor es aus irgendeinem Grund etwas erreichen kann: Mangel an Rechten, Ausführung im falschen cwd? – Tjaart

+0

Ich versuchte/usr/bin/env/python, immer noch kein Glück – yebw

Antwort

9

Das Skript main.py ruft einige Methoden aus anderen Modulen unter python_prj auf, ist das wichtig?

Ja, tut es. Alle Module müssen zur Laufzeit auffindbar sein. Sie können dies auf verschiedene Arten erreichen, am besten können Sie jedoch die Variable PYTHONPATH in Ihrer crontab festlegen.

Sie könnten auch die MAILTO-Variable in Crontab festlegen, so dass Sie E-Mails mit beliebigen Rückverfolgungen erhalten.

[update] hier ist die Spitze meiner crontab:

www:~# crontab -l 

DJANGO_SETTINGS_MODULE=djangocron.settings 
PATH=... 
PYTHONPATH=/home/django 
MAILTO="[email protected]" 
... 
# m h dom mon dow command 
10-50/10 * * * *    /home/django/cleanup_actions.py 
... 

(Laufbereinigungsaktionen alle 10 Minuten, außer an der Spitze der Stunde).

+0

Ich verstehe nicht, ich tippe "python /home/python_prj/main.py" in der Befehlszeile, es funktioniert. PYTHONPATH wird auf python'path oder den Pfad der Module gesetzt – yebw

+0

Alle Module unter python_prj sind angepasst – yebw

+0

Ich habe nur alle Module entfernt, die main.py importiert. immer noch keine Arbeit – yebw

0

Überprüfen Sie die Berechtigungen des Skripts. Stellen Sie sicher, dass es ausführbar ist von cron-- try chmod + x main.py.

3

Jeder Dateizugriff in Ihren Skripten? Und wenn ja, haben Sie relative Pfade (oder sogar: keinen expliziten Pfad) in Ihrem Skript verwendet?
Wenn von der Kommandozeile aus gestartet wird, ist der eigentliche Ordner 'Ihr Pfad', von dem aus Sie das Skript starten. Wenn von cron ausgeführt, kann "Ihr Pfad" abhängig von den Umgebungsvariablen unterschiedlich sein.
Versuchen Sie also, absolute Pfade zu allen Dateien zu verwenden, auf die Sie zugreifen.

+0

hilfreiche Antwort: Ich hatte Zugriff auf eine SQLite-Datenbank in meinem Python-Skript und hatte keinen vollständigen Pfad angegeben. – vrleboss