GNU/Linux >> Linux の 問題 >  >> Linux

conda仮想環境で実行するcronジョブ

SO に関する詳細な理由とともに、実用的なソリューション (Ubuntu 18.04) を投稿しました。

短い形式は次のとおりです:

1. ~/.bashrc で Anaconda によって追加されたコピー スニペット (ファイルの最後に) 別のファイル ~/.bashrc_conda

Anaconda 2020.02 のインストール時点で、スニペットは次のようになります:

# >>> conda initialize >>>
# !! Contents within this block are managed by 'conda init' !!
__conda_setup="$('/home/USERNAME/anaconda3/bin/conda' 'shell.bash' 'hook' 2> /dev/null)"
if [ $? -eq 0 ]; then
    eval "$__conda_setup"
else
    if [ -f "/home/USERNAME/anaconda3/etc/profile.d/conda.sh" ]; then
        . "/home/USERNAME/anaconda3/etc/profile.d/conda.sh"
    else
        export PATH="/home/USERNAME/anaconda3/bin:$PATH"
    fi
fi
unset __conda_setup
# <<< conda initialize <<<

次のことを確認してください:

  • パス /home/USERNAME/anaconda3/ 正解です。
  • cronjob を実行しているユーザーに 読み取り権限 がある ~/.bashrc_conda の場合 (そして、他のユーザーはこのファイルに書き込めません)。

2. crontab -ebash で cronjobs を実行する行を追加します ソース ~/.bashrc_conda

crontab -e を実行 次の cronjob の前を挿入します。 :

SHELL=/bin/bash
BASH_ENV=~/.bashrc_conda

3. crontab -e で cronjob conda activate my_env; の先頭に含めます 例のように

conda 環境内の Python インタープリターで毎日正午 12:30 に実行されるスクリプトのエントリの例:

30 12 * * * conda activate my_env; python /path/to/script.py; conda deactivate

以上です。

~/.bashrc_conda のスニペットが conda が ~/.bashrc でスニペットを更新する場合に備えて、最新です .


スタック オーバー フローに関する回答が見つかりました:

https://stackoverflow.com/questions/3287038/cron-and-virtualenv

解決策は、仮想環境自体で python 実行可能ファイルを参照することです。私の場合、この実行可能ファイルを実行するように bash ファイルを変更しました:

/home/etlservice/anaconda3/envs/sql_server_etl/bin/python


これは私にとってうまくいった解決策です。

source /root/miniconda3/etc/profile.d/conda.sh && \
conda activate <your_env> && \
python <your_application> &

Ubuntu 18.04.3 LTS で、Conda バージョン 4.7.12 で miniconda を使用しています。

上記をスクリプト内に配置して、crontab 経由でも問題なく実行できます。


Linux
  1. LinuxでCondaを使用してRust仮想環境を作成する方法

  2. PHPスクリプトが実行されているかどうかを確認するためのcronジョブ、実行されていない場合は実行しますか?

  3. 特定の曜日に cron ジョブを実行する方法

  1. cron ジョブがまだ実行されていない場合にのみ実行する

  2. 1 時間ごとに実行可能ファイルを実行するように cron ジョブを設定する方法は?

  3. 毎週の cron ジョブをテストする

  1. docker コンテナ内で cron ジョブを実行する方法

  2. 1 分ごとの cron.d ジョブが実行されないのはなぜですか?

  3. 2 日ごとの午後 11 時に cron ジョブを実行するように設定する方法