2010-05-27 11 views

Antwort

15

virtualenv des activate Skript ist ziemlich einfach. Es legt meistens den Pfad zu Ihrem Python-Interpreter von virtualenv fest; die anderen Dinge, die es tut (Einstellung PS1, Speichern alter Variablen, etc.) sind nicht wirklich notwendig, wenn Sie nicht in einer interaktiven Shell sind. Der einfachste Weg ist nur Ihren Python-Skript mit dem richtigen Python-Interpreter zu starten, die in einem von zwei Arten erfolgen können:

1. Ihren Python-Skript einrichten, um Ihre virtualenv Dolmetscher Python verwendet

Unter der Annahme, Dolmetscher Ihre virtualenv ist bei ~/virtualenv/bin/python ist, können Sie diesen Pfad an der Spitze Ihres Python-Skript setzen:

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

Und dann starten Sie Ihr Skript von Ihrem crontab, als normal.

2. Starten Sie das Skript mit dem richtigen Python-Interpreter in Ihrem cronjob

Ihr Skript Unter der Annahme, bei ~/bin/cronjob und Pythons Ihre virtualenv Interpreter ist bei ~/virtualenv/python, könnten Sie dies in Ihrer crontab setzen:

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

was über die Wege Bibliotheken easy_install? – Timmy

+2

Wenn sie auch in der virtuellen Umgebung oder dem Verzeichnis "global" site-packages installiert sind, sollten sie gefunden werden; Andernfalls werden Sie sie in Ihrem '$ PYTHONPATH' setzen müssen, was ein bisschen hässlicher wird aber mit'/usr/bin/env', etc. zu jagen den Python bin erreicht werden kann durch den Markt. – mipadi

+1

der letzte Codeblock sollte wahrscheinlich mit "/ home/bin/cronjob" enden –

1

Mein Ansatz ist immer crontab so einfach wie möglich zu halten und alle Konfigurationen innerhalb Skripte von crontab genannt zu behandeln.

1) Erstellen Sie ein Shell-Skript: zum Beispiel /var/webapp/cron.sh

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

wo /var/webapp/.env/bin ist die virtualenv Lage. Stellweg, benötigen Sie keine Quelle ../activate

2) Stellen Sie richtig Ihre Umgebung ausgeführt werden. Zum Beispiel für eine Anwendung 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() 

Auf diesem Beispiel django Einstellungen werden auf Einstellungen/production.py befindet

3) Schließlich bearbeiten/etc/crontab. Zum Beispiel zu werden jede halbe Stunde ausführen, jeden Tag:

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

Beachten Sie, dass es wichtig ist, Protokolle zu erzeugen, um Ihnen Fehler oder Debug-Meldungen finden zu helfen.