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