Python
cron
Anaconda

【python】anaconda環境でcronを設定する

pythonプログラムを定期的に実行するため、cronを設定したときの備忘録です。

環境について

$ /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=16.04
DISTRIB_CODENAME=xenial
DISTRIB_DESCRIPTION="Ubuntu 16.04.3 LTS"

pythonの環境は下記ページの通り行っています。
python開発環境構築

最新のAnaconda (5.0.0) をインストールし、デフォルトの環境として設定しています。← 大事!!

$ vim .bashrc
export PYENV_ROOT="$HOME/.pyenv"
export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init -)"
export PATH="$PYENV_ROOT/versions/anaconda3-5.0.0/bin:$PATH"

設定してみる

まずはプログラムが実行できることを確認。

$ python run.py
success

問題なさそうなので、cronを設定してみます。

$ crontab -e
*/30 * * * * cd /home/hoge; python run.py # 追加

するとモジュールがないとかエラーが出まくります。。。コマンドで実行する場合は問題ないので、おかしいなと思ったらcronは.bashrcで設定している環境変数が読み込まれないようです。(つまり標準でインストールされているpythonで実行する)

なのでコマンドを下記のように変更します。

$ crontab -e
*/30 * * * * cd /home/hoge; ~/.pyenv/versions/anaconda3-5.0.0/bin/python run.py

無事設定ができました。

おまけ

cron設定するプログラムにコマンドライン引数を指定する場合は、そのまま設定することはできないので、一旦シェルスクリプトに実行するコマンドを書いて、そのシェルスクリプトをcronに設定します。

$ vim run.sh
~/.pyenv/versions/anaconda3\-5.0.0/bin/python run.py --input_file test.txt

$ crontab -e
*/30 * * * * cd /home/hoge; sh run.py