pythonのスクリプトファイルが手動で実行すると動くのに、cronに設定すると何故か動かなくてハマりました。同じようにハマっている方に向けて備忘録を残します。
1. 実施したこと
①EC2にpython3の仮想環境をインストール (インストール方法)
②home配下にpythonのスクリプトファイル(test.py)を配置
③下記のコマンドで手動実行させた場合には実行可能
(env) [ec2-user@ip-xx-xx-xx-xx ~]$python3 test.py
④crontabで以下のように設定
* * * * * python3 test.py
⑤boto3モジュールがないよとエラーが発生
Traceback (most recent call last):
File "test.py", line 3, in <module>
import boto3
ModuleNotFoundError: No module named 'boto3'
2. 原因
・cronは環境変数をもたない
・pyenv環境を利用している場合、PATHの明示が必要
3. 解決策
①以下のコマンドでPATHを確認する
(env) [ec2-user@ip-xx-xx-xx-xx ~]$env
:
:
PATH=/home/ec2-user/my_app/env/bin:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/ec2-user/.local/bin:/home/ec2-user/bin
②crontab -eで最初の行にPATHを追記する
PATH=/home/ec2-user/my_app/env/bin:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/ec2-user/.local/bin:/home/ec2-user/bin
* * * * * python3 test.py
cronで問題なく実行できました!
4. 参考記事
こちらの記事が大変参考になりました!ありがとうございます!!