Как установить virtualenv для crontab?
Я хочу настроить crontab для запуска скрипта Python.
скажем скрипт что-то вроде:
#!/usr/bin/python
print "hello world"
есть ли способ указать virtualenv для этого скрипта Python для запуска? В shell я бы просто сделал:
~$ workon myenv
есть ли что-то эквивалентное, что я мог бы сделать в crontab для активации virtualenv?
3 ответа:
Если вы используете "работу" вы на самом деле использовать "обертку виртуальное окружение", которое представляет собой еще один уровень абстракции, который сидит на вершине виртуальное окружение. только virtualenv можно активировать с помощью cd'ING в корневой каталог virtualenv и запустить:
source bin/activate
workon-это команда, предоставляемая оболочкой virtualenv, а не virtualenv, и она делает некоторые дополнительные вещи, которые не обязательно требуются для простого virtualenv. Все, что вам действительно нужно сделать, это источник файла bin / activate в вашем корневой каталог виртуального окружения, чтобы "включить" виртуальное окружение.
вы можете настроить свой crontab для вызова скрипта bash, который делает это:
#! /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
еще одно решение, которое хорошо работает для меня...
0 9 * * * /path/to/virtenv/bin/python /path/to/cron_script.py
Я предпочитаю использовать python непосредственно из virtualenv...
С помощью bash вы можете создать универсальную виртуальную оболочку env, которую можно использовать для вызова любой, как
time
может обернуть любую команду.
virt_env_wrapper.bash
:#!/bin/bash source path/to/virtual/env/bin/activate "$@"
магическое заклинание Баша
"$@"
повторно экранирует все маркеры в исходной командной строке, чтобы при вызове:virt_env_wrapper.bash python foo.py bar 'baz blap'
foo.py
видимsys.argv
на['bar', 'baz blap']