2012-11-06 14 views
7

crontab non riesce a eseguire uno script Python. La riga di comando che sto usando per eseguire lo script Python è ok.Crontab non riesce a eseguire lo script Python

Si tratta di soluzioni che avevo provato:

  • aggiungere #!/usr/bin/env python nella parte superiore della main.py
  • aggiungere PATH=/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin in cima crontab
  • chmod 777 al main.py file di
  • service cron restart

mio crontab è:

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

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

e il log in/var/log/syslog è:

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

e nient'altro.

Lo script main.py chiama alcuni metodi da altri moduli sotto python_prj, importa?

Chiunque può aiutarmi?

+0

hai provato "/ usr/bin/env/python /home/python_prj/main.py" nel tuo comando cron? – Tjaart

+1

Forse il tuo script sta andando in crash prima che possa ottenere qualcosa per qualsiasi ragione: mancanza di diritti, esecuzione nel cwd sbagliato? – Tjaart

+0

Ho provato/usr/bin/env/python, ancora senza fortuna – yebw

risposta

9

Lo script main.py chiama alcuni metodi da altri moduli in python_prj, importa?

Sì, lo fa. Tutti i moduli devono essere reperibili in fase di esecuzione. Puoi farlo in diversi modi, ma il più appropriato potrebbe essere impostare la variabile PYTHONPATH nel tuo crontab.

Si potrebbe anche voler impostare la variabile MAILTO in crontab in modo da ottenere e-mail con qualsiasi traceback.

[update] Ecco la parte superiore del mio 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 
... 

(che eseguono azioni di pulizia ogni 10 minuti, tranne nella parte superiore del momento).

+0

Non capisco, digito "python /home/python_prj/main.py" nella riga di comando, funziona. PYTHONPATH sarà impostato su python'path o sul percorso dei moduli – yebw

+0

tutti i moduli sotto python_prj sono personalizzati – yebw

+0

Ho appena rimosso tutti i moduli importati da main.py. ancora senza lavoro – yebw

0

Verificare le autorizzazioni dello script. Assicurati che sia eseguibile da cron-- prova chmod + x main.py.

3

Qualsiasi accesso ai file negli script? E se sì, hai usato percorsi relativi (o anche: nessun percorso esplicito) nel tuo script?
Quando si esegue da riga di comando, la cartella effettiva è "il percorso" da cui si avvia lo script. Quando eseguito da cron, "il tuo percorso" potrebbe essere diverso a seconda delle variabili di ambiente.
Quindi prova a utilizzare percorsi assoluti per qualsiasi file a cui accedi.

+0

risposta utile: stavo accedendo a un database sqlite nel mio script python e non avevo fornito il percorso completo. – vrleboss

Problemi correlati