web-dev-qa-db-ja.com

anaconda envを使用してcrontabジョブを実行する

Cronジョブでpythonスクリプトを既存のanaconda pythonという環境を使用してmy_envと呼ばれる環境で実行するようにします。 cronジョブはmy_script.bashと呼ばれるスクリプトを実行します。これにより、envがアクティブになり、pythonスクリプトが実行されます。

#!/bin/bash
source activate my_env
python ~/my_project/main.py

コマンドラインからこのスクリプトを実行しようとしても機能しません。

$ sh scripts/my_script.bash
scripts/my_script.bash: 9: scripts/my_script.bash: source: not found

適切な環境がアクティブになっていることを確認するために何をする必要がありますか? 5歳のように説明してください。

24
stoebelj

shではなくbashを呼び出してください。 sourceはbashコマンドです。

- sh scripts/my_script.bash
+ bash scripts/my_script.bash

あるいは単に

chmod +x scripts/my_script.bash
./scripts/my_script.bash

bash Shebangを追加したので。

10
Jérôme

私は最近 canopy からAnacondaに正確に切り替えて、cronジョブでenvをアクティブにする必要がないようにしました。 Anacondaは、PATH環境変数に基づいて、これを非常に単純にします。 (私は miniconda を使用していますが、完全なAnacondsインストールではありませんが、anacondaは同じように動作するはずです)

テストした方法は2つあります。

  • pythonスクリプト、main.pyにシバンを追加します

    #!/home/users/user_name/miniconda2/envs/my_env/bin/python

  • Crontabの先頭にPATHを追加します

    PATH=/home/users/user_name/miniconda2/envs/my_env/bin

更新:

ジェロームの答えとcbarrickのコメントは正しいです。 pynco,のような適切なncoコマンドを見つけるために完全なconda環境が必要なncks, ncrcat.が必要なConda envで上記のアプローチを使用して焼き付けたところです。最初にconda activateを呼び出すcronから。

20
Eric Bridger

私の場合、シェルスクリプトの次の行を実行したときにこのエラーが発生しました:source activate my_env

activate: No such file or directory

だから私はsource activate my_envからsource /path/to/conda/bin/activate my_env。それからそれは働き始めます。

1
Youngmin Kim