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にも設定が必要になるので、覚えておく

この記事が気に入ったらサポートをしてみませんか?