コンソールで叩くと動くスクリプトがCronで動かない時
以下のサイトが参考になった。
原因究明は以下の順番で。
- ログを見てCronが動いているか確かめる
- エラーをファイルに出力する
ログに何も残っていなかったらCronが動いてないということなので、crontabの設定があっているか、crondが動いているかといったあたりをチェックする。
その辺りが問題なければスクリプトのエラーをファイルに出力して内容を確かめる。
シェルをzshにするとエラーの出力が親切らしい。
SHELL=/bin/zsh 5 * * * * /home/akahige/hoge.rb > /tmp/cron_error.log 2>&1
この場合のエラーの内容はだいたいパスや環境変数の問題だと思うのでそれらをなんとかする。
端的に言うと以下の方法がある。
- スクリプト内で環境変数を定義する
- crontabで環境変数を定義する
crontabに定義した方がきれいな気がする。
PATH=/etc:/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin 5 * * * * /home/akahige/hoge.rb
“コンソールで叩くと動くスクリプトがCronで動かない時” に対して2件のコメントがあります。
コメントは受け付けていません。
私のケースだと、コンソールに確認のためのデバッグ文字列を出していたのですが、
それがunicodeだのなんだのでcronだと上手く実行出来なかったってのがありました。
結局デバッグ用の出力を出さない事で解決させましたw
なるほど。そういうケースもあるんですね。参考になります。