cronでpythonのスクリプトが動かない
ハマりました。
pythonでウェブサイトのデータを編集してCSVを出力するスクリプトを作り、cronで定期実行するようにしました、が。
動かない!!!全然CSVが出てこない!!なんで!!なんでなの!!!
(いろいろやりすぎて何が効いたのかわからないので違ったらすいません)
やったこと
1.cronでエラーが出ていないか調べる
crontabに登録したコマンドの標準出力と標準エラー出力をログ書き出ししてcronがちゃんと動作しているか調べました
→どうやら動いてるっぽかった
2.スクリプトに不具合がないか調べる
cronは動いているっぽかったので、スクリプトの問題を調べました。
- csvのモジュール?はカレントディレクトリを設定することができるらしく、 それを設定するコードがなかったのでそのせいかなと追加してみました。→未だ動かず
- crontabに登録するコマンドでpythonコマンドにパスを付ける。→普通コマンドラインで起動するときは
python /ディレクトリ/スクリプト.py
としますが、cronに入れるときはpythonではなく、pythonのフルパス?を書く必要があるそうです。which python
でパスを調べ、/ディレクトリ/python /ディレクトリ/スクリプト名.py
としました。→未だ動かず - スクリプトの実行権限を見直す。初歩の初歩ですいません。→未だ動かず
この時点で途方に暮れ、とりあえず一日寝かせることにしました。奇妙なのは、コマンドラインではちゃんと動く。cronに入れたときだけ動かない。そして翌日、ついに核心的な方法に到達しました。
- homeで動くか試してみる。→cronの場合は起動時にカレントディレクトリがhomeになるらしいという情報を聞きつけ、試してみました。確かに、手動で動かすときは、スクリプトのディレクトリで動かしてた!さっそくやってみました。→動かなかった!!!
原因は、アクセスするサイトが証明書必須だったので、requestsで証明書を指定してアクセスさせていたのですが、その証明書を指定するパスが相対パスだったためhomeで起動すると上手く読み込めずエラーとなっていました。この部分を修正したところ、ちゃんとcronで動きました!ドーパミンでたああ
そんなこんなでした