Pythonスクリプトを実行するためにcrontabをセットアップしたい。
スクリプトは次のようなものだとしましょう:
#!/usr/bin/python
print "hello world"
Pythonスクリプトを実行するためのvirtualenvを指定する方法はありますか?シェルでは次のようにします。
~$ workon myenv
Virtualenvをアクティブにするためにcrontabでできることと同等のものはありますか?
「workon」を使用している場合、実際には「virtualenv wrapper」を使用しています。これは、virtualenvの上にある別の抽象化層です。 virtualenvのみをアクティブにするには、virtualenvルートディレクトリにcdして、次を実行します。
source bin/activate
workonは、virtualenvではなく、virtualenvラッパーによって提供されるコマンドであり、プレーンなvirtualenvに必ずしも必要ではない追加機能を実行します。本当に必要なのは、virtualenvルートディレクトリのbin/activateファイルをソースとして、virtualenvを「アクティブ化」することだけです。
これを行うbashスクリプトを呼び出すようにcrontabをセットアップできます。
#! /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
私はvirtualenvから直接pythonを使用することを好む...
Bashを使用すると、 any コマンドを呼び出すために使用できる汎用仮想環境ラッパーを作成できます。 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
of ['bar', 'baz blap']