💨

cronで仮想環境venvのpythonが実行できなかった

2024/10/08に公開

環境

$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 24.04 LTS
Release:        24.04
Codename:       noble

$ python --version
Python 3.12.3

やろうとしたこと

cronでAM10:00にpythonスクリプトを自動実行したかった
実行したいスクリプトの場所は/home/user/project/script.py
venvの場所は/home/user/project/.venv

0 10 * * * cd /home/user/project && source /home/user/project/.venv/bin/activate && /usr/bin/python script.py

crontab -eで上記のように設定したがうまく動かない

うまくいった方法

/bin/activateを使うのではなく、/bin/pythonを呼ぶようにしたら動いた

0 10 * * * cd /home/user/project && /home/user/project/.venv/bin/python script.py

原因

cronはシェルに/usr/bashではなく、/usr/shを使用するため
shにはsourceコマンドがないのでうまく動いていなかった

上記の方法ではなくsource.に置き換えても動くはず(試してはない)
それかcronの設定ファイルでSHELL環境変数を/usr/bashに設定するか

Discussion