💨
cronで仮想環境venvのpythonが実行できなかった
環境
$ 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