cronでpythonを実行する際にハマった話
まずは、結論から
実行されるroot権限に環境変数が設定されていなかった
上だけ見てもなんのこっちゃですが、以下まとめていきます。
私がpythonを動かしている環境は「本番環境」と「検証環境」に分けています。それを分けるために以下のような形で環境変数を設定しています。
# 本番環境 (os ubuntu)
ENVIRONMENT="production"
export ENVIRONMENT
# 検証環境 (os Mac)
ENVIRONMENT="development"
export ENVIRONMENT
pythonから自動で切り替える際には、以下のコマンドを行っている
config_class = {
"production": ConfigProduction,
"development": ConfigDevelopment
}
config_target = config_class[os.getenv('ENVIRONMENT')]
cronをシェルスクリプトを手動で実行させると問題なく動作し、cronで実施すると、うんともすんとも言わないので、どうしようかと思っていました。
結果的には、cronはroot権限で実行させる必要がありますが、環境変数を設定したのは、一般ユーザー側にされており、rootには設定されていませんでした。
環境変数が設定されていると思い込んでいたために、原因の追求に時間がかかってしまった。
cronで何か動作させる際に環境変数を利用する場合は、rootにも設定が必要になるので、覚えておく
この記事が気に入ったらサポートをしてみませんか?