2010-05-27 17 views

Respuesta

15

El guión de activación de virtualenv es bastante simple. En su mayoría establece el camino al intérprete de Python de tu virtualenv; las otras cosas que hace (configuración PS1, guardar variables antiguas, etc.) no son realmente necesarias si no está en un shell interactivo. Así que la forma más fácil es simplemente para poner en marcha la secuencia de comandos de Python con el intérprete de Python correcta, lo que se puede hacer en una de dos maneras:

1. Establecer la secuencia de comandos de Python para usar intérprete de Python de su virtualenv

suponiendo intérprete de su virtualenv está en ~/virtualenv/bin/python, puede poner ese camino en la parte superior de la secuencia de comandos de Python:

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

Y a continuación, iniciar la secuencia de comandos de su crontab, como de costumbre.

2. Iniciar el guión con el intérprete de Python adecuado en su tarea programada

Asumiendo que su escritura está en ~/bin/cronjob e intérprete de Python de su virtualenv está en ~/virtualenv/python, se puede poner esto en su crontab:

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

¿qué ocurre con las rutas de acceso a las bibliotecas de easy_install? – Timmy

+2

Si están instalados también en el entorno virtual, o en el directorio "global" de paquetes de sitio, deben encontrarse; de lo contrario, tendrás que ponerlos en tu '$ PYTHONPATH', que se pone un poco más feo pero se puede lograr lanzando el bin de Python con'/usr/bin/env' o somesuch. – mipadi

+1

el último bloque de código probablemente debería terminar con "/ home/bin/cronjob" –

1

Mi enfoque es siempre mantener crontab tan simple como sea posible y tratar todas las configuraciones dentro de los scripts llamados por crontab.

1) crear un guión shell: por ejemplo /var/webapp/cron.sh

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

donde /var/webapp/.env/bin es la ubicación virtualenv. Configuración de RUTA, no es necesario ejecutar la fuente ../activar

2) Establecer correctamente su entorno. Por ejemplo, para una aplicación 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() 

En este ejemplo, la configuración de Django se encuentran en la configuración/production.py

3) Por último, edite/etc/crontab. Por ejemplo, para ser ejecutar cada media hora, todos los días:

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

en cuenta que es importante para generar registros para ayudarle a encontrar errores o mensajes de depuración.

Cuestiones relacionadas