【Python】configparserを使っているプログラムがcronで動かなかったので対処方法の覚え書き

【Python】configparserを使っているプログラムがcronで動かなかったので対処方法の覚え書き

pythonで作ったスクリプトがcronで動かなかったので対処方法の覚え書きです。

configparserを使うようになりました。

最近Pythonでconfigparserを使って設定ファイルから値を取り出す方法を覚えた。

例:
実行パス(venv環境)
/var/python/test/bin/python/

pythonのディレクトリ
/var/python/test/

実行プログラム
test.py

configファイル
/config/conf.cnf

クーロンの設定
0 * * * * root /var/python/test/bin/python /var/python/test/test.py

これでスクリプトを作成してコマンドラインからの動作で問題なかったので、cronで自動実行させようと設定してみて、時間になって結果を確認してみた。

cronでスクリプトが動かない

結果が出ていない?
動いてない?

エラーを見てみると

configparser.NoSectionError: No section: ‘db’

設定ファイルが取り出せてないみたい。

cronからだと動かないみたい

エラー内容から調べてみたらこんな情報があった。

Pythonスクリプトをcron実行するとconfig fileが読めずにエラーになる
cronの実行時にカレントディレクトリをプログラムの場所に変更してはくれないため、
相対パスで指定していたconfig fileが読み込むことができなかったと思われる。

解決方法

cronの記述にプログラムを実行する前にcdでカレントディレクトリをスクリプトを格納してある場所に移動させる。
そして実行

0 * * * * root /var/python/test/bin/python /var/python/test/test.py
↓
0 * * * * root cd /var/python/test/ && /var/python/test/bin/python /var/python/test/test.py

その後ふと考えてみて、カレントディレクトリを変更しているから

0 * * * * root cd /var/python/test/ && bin/python test.py

これでも動くかなとやってみたら動いた!

クーロンの設定を変更したらサービスの再起動を忘れずに。