Python スクリプトを実行するように crontab をセットアップしたいと考えています。
スクリプトが次のようなものだとします。
#!/usr/bin/python
print "hello world"
その Python スクリプトを実行するための virtualenv を指定する方法はありますか? シェルでは、次のようにします。
~$ workon myenv
virtualenvをアクティブにするためにcrontabでできることはありますか?
Python スクリプトを実行するように crontab をセットアップしたいと考えています。
スクリプトが次のようなものだとします。
#!/usr/bin/python
print "hello world"
その Python スクリプトを実行するための virtualenv を指定する方法はありますか? シェルでは、次のようにします。
~$ workon myenv
virtualenvをアクティブにするためにcrontabでできることはありますか?
私にとってうまくいく別の解決策...
0 9 * * * /path/to/virtenv/bin/python /path/to/cron_script.py
virtualenv から直接 python を使用することを好みます...
「workon」を使用している場合、実際には「virtualenv ラッパー」を使用しています。これは、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
bash を使用すると、任意のコマンドをラッパーする方法と同じように、任意のコマンドを呼び出すために使用できる汎用の仮想環境ラッパーを作成できます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
の_['bar', 'baz blap']