2010-05-27 6 views

risposta

15

Lo script di attivazione di virtualenv è piuttosto semplice. Imposta principalmente il percorso dell'interprete Python di virtualenv; le altre cose che fa (impostando PS1, salvando le vecchie variabili, ecc.) non sono realmente necessarie se non ci si trova in una shell interattiva. Quindi il modo più semplice è solo per lanciare il vostro script Python con la giusta interprete Python, che può essere fatto in due modi:

1. Configurare il proprio script Python per usare Python interprete del virtualenv

supponendo interprete del vostro virtualenv è ~/virtualenv/bin/python, si può mettere quel percorso nella parte superiore dello script Python:

#!/home/user/virtualenv/bin/python 

e poi lanciare lo script dal vostro crontab, come di consueto.

2. Avviare lo script con il corretto interprete Python nel vostro cronjob

Supponendo che lo script è in ~/bin/cronjob e Python interprete del vostro virtualenv è ~/virtualenv/python, si potrebbe mettere questo nel vostro crontab:

* * * * * /home/user/virtualenv/python /home/user/bin/crontab 
+0

E i percorsi per le librerie easy_install? – Timmy

+2

Se sono installati anche nell'ambiente virtuale, o nella directory "globale" dei pacchetti del sito, dovrebbero essere trovati; altrimenti, dovrai metterli nel tuo '$ PYTHONPATH', che diventa un po 'più brutto, ma può essere ottenuto lanciando il cestino di Python con'/usr/bin/env' o somesuch. – mipadi

+1

l'ultimo blocco di codice dovrebbe probabilmente terminare con "/ home/bin/cronjob" –

1

Il mio approccio è sempre quello di mantenere crontab il più semplice possibile e trattare tutte le configurazioni all'interno degli script chiamati da crontab.

1) Creare uno script di shell: per esempio /var/webapp/cron.sh

#!/bin/sh 
PATH="/var/webapp/.env/bin:$PATH" 
export PATH 
cd /var/webapp/ 
python test.py 

dove /var/webapp/.env/bin è la posizione virtualenv. Impostazione PATH, non è necessario eseguire l'origine ../activate

2) Impostare correttamente l'ambiente. Ad esempio, per un'applicazione di Django:

#!/usr/bin/env python 

import os 
from datetime import datetime 

os.environ['DJANGO_SETTINGS_MODULE'] = 'settings.production' 
os.environ['DJANGO_CONF'] = 'settings.production' 

from util.models import Schedule 

dset = Schedule.objects.all() 
for rec in dset: 
    print rec 

print 'cron executed %s' % datetime.today() 

In questo esempio, le impostazioni di Django si trovano sulle impostazioni/production.py

3) Infine, modificare/etc/crontab. Ad esempio, per essere eseguire ogni mezz'ora, tutti i giorni:

1,31 * * * * root /var/webapp/cron.sh >> /var/webapp/cron.log 

Si noti che è importante per generare registri per aiutarvi a trovare errori o messaggi di debug.