2010-05-27 7 views

Répondre

15

Le script d'activation de virtualenv est assez simple. Il définit principalement le chemin vers l'interpréteur Python de votre virtualenv; les autres choses qu'il fait (en réglant PS1, en sauvegardant les anciennes variables, etc.) ne sont pas vraiment nécessaires si vous n'êtes pas dans un shell interactif. Donc, la meilleure façon est juste de lancer votre script Python avec l'interpréteur Python correct, ce qui peut être fait dans l'une des deux façons suivantes:

1. Configurez votre script Python pour utiliser l'interpréteur Python de votre virtualenv

Si l'on suppose votre interprète de virtualenv est à ~/virtualenv/bin/python, vous pouvez mettre ce chemin en haut de votre script Python:

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

Et puis lancez votre script à partir de votre crontab, comme d'habitude.

2. Lancez le script avec l'interpréteur Python approprié dans votre cronjob

En supposant que votre script est à ~/bin/cronjob et l'interpréteur Python de votre virtualenv est à ~/virtualenv/python, vous pouvez mettre dans votre crontab:

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

qu'en est-il des chemins d'accès aux bibliothèques easy_install? – Timmy

+2

S'ils sont également installés dans l'environnement virtuel, ou dans le répertoire "global" des packages de sites, ils doivent être trouvés; sinon, vous devrez les mettre dans votre '$ PYTHONPATH', ce qui devient un peu plus laid mais peut être accompli en lançant la corbeille Python avec'/usr/bin/env' ou quelque chose comme ça. – mipadi

+1

le dernier bloc de code devrait probablement se terminer par "/ home/bin/cronjob" –

1

Mon approche est toujours de garder crontab aussi simple que possible et traiter toutes les configurations dans les scripts appelés par crontab.

1) Créer un script shell: par exemple /var/webapp/cron.sh

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

/var/webapp/.env/bin est l'emplacement de virtualenv. Paramètre PATH, vous n'avez pas besoin d'exécuter la source ../activate

2) Réglez correctement votre environnement. Par exemple, pour une application 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() 

Sur cet exemple, les paramètres de django sont situés sur les paramètres/production.py

3) Enfin, modifier/etc/crontab. Par exemple, pour être exécuter chaque demi-heure, tous les jours:

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

avis qu'il est important de générer des journaux pour vous aider à trouver des erreurs ou des messages de débogage.

Questions connexes