Cómo configurar virtualenv para un crontab?
Quiero configurar un crontab para ejecutar un script Python.
Digamos que el script es algo así como:
#!/usr/bin/python
print "hello world"
¿Hay alguna forma de especificar un virtualenv para que se ejecute el script Python? En shell solo haría:
~$ workon myenv
¿Hay algo equivalente que pueda hacer en crontab para activar un virtualenv?
3 answers
Si estás usando "workon" en realidad estás usando "virtualenv wrapper" que es otra capa de abstracción que se encuentra encima de virtualenv. virtualenv solo puede ser activado por cd'ing a su directorio raíz virtualenv y ejecutando:
source bin/activate
Workon es un comando proporcionado por virtualenv wrapper, no virtualenv, y hace algunas cosas adicionales que no se requieren necesariamente para virtualenv llano. Todo lo que realmente necesita hacer es obtener el archivo bin / activate en su raíz virtualenv directorio para" activar " un virtualenv.
Puede configurar su crontab para invocar un script bash que haga esto:
#! /bin/bash
cd my/virtual/env/root/dir
source bin/activate
# virtualenv is now active, which means your PATH has been modified.
# Don't try to run python from /usr/bin/python, just run "python" and
# let the PATH figure out which version to run (based on what your
# virtualenv has configured).
python myScript.py
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-07-30 23:10:21
Otra solución que funciona bien para mí...
0 9 * * * /path/to/virtenv/bin/python /path/to/cron_script.py
Prefiero usar python directamente desde virtualenv...
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-06-11 10:06:38
Con bash, puede crear una envoltura env virtual genérica que puede usar para invocar cualquiera comando, al igual que cómo time
puede envolver cualquier comando.
virt_env_wrapper.bash
:
#!/bin/bash
source path/to/virtual/env/bin/activate
"$@"
El conjuro mágico de Bash "$@"
vuelve a escapar todos los tokens de la línea de comandos original de modo que si invocaras:
virt_env_wrapper.bash python foo.py bar 'baz blap'
foo.py
veríamos un sys.argv
de ['bar', 'baz blap']
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-01-25 14:10:33