まあpythonに限った話ではないと思いますけども
 
  • ぱいちょんがうごかない

 
私の使っているVPSで、cronを実行しようとして、どうにもうまくいかない
crontab -eで10 * * * * python home/hoge/hoge.py みたいなことを書いたのにうまくいかない
service crond statusでみてもちゃんとうごいてる
えーどうして・・・どうしてだろう気になって気になって気になって気になって
 
さっきのコマンドの後ろに、 >>/home/hoge/analog.log 2>>/home/hoge/analog-err.log
とか書いてみました。前者は標準出力を、
後者はエラーの場合の標準出力(?)をログに書き出すらしいです。
すると、
「ImportError: No module named request」
とか書いてあるではないか!
確かにスクリプト(hoge.py)の冒頭、「import urllib.request」って書いてあるけど、
普通に実行すればこのエラーは起きない まあurllib使ってないけど
どうしたものかと思いぐぐると、どうもpython2ではurllib.requestと
いうものはないらしく、自分がpython3をインストールしているせいだ
と気がついた。
このVPSには最初からpython2.6かなんかが入ってて、インストールしたあとに
ln -s /usr/local/python/bin/python3 /usr/local/bin/python (だと思う)
とかやって動かしてるんですけど、
これがcronで実行したときうまく読み込んでくれない?らしい(環境変数の問題)
で、cronに「python -V」と書くと、「Python 2.6.6」と出力されるわけで、
ずっとこれと格闘してログに「Python 2.6.6 Python 2.6.6 Python 2.6.6 
Python 2.6.6」ってずらーっとかきだすはめになって・・・


  • 解決

そこで、crontab -eの最初の行に、
PATH=/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
とかいうおまじないを書くことで解決しました。やったね。
この赤文字のところが重要で、これを一番最初に持ってくることで
python3のリンクを優先して読み込んでくれるらしいです。
まあまだLinuxはわからないことだらけですね。ちなみにCentOSです。


 
ちなみにその実行したスクリプトがこちらになります
かわいいですね