コンソールで叩くと動くスクリプトが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

この投稿へのコメント

  1. dgr said on 2011年8月28日 at 6:01 PM

    私のケースだと、コンソールに確認のためのデバッグ文字列を出していたのですが、
    それがunicodeだのなんだのでcronだと上手く実行出来なかったってのがありました。
    結局デバッグ用の出力を出さない事で解決させましたw

  2. akahige said on 2011年8月29日 at 2:38 PM

    なるほど。そういうケースもあるんですね。参考になります。

コメントを残す

メールアドレスが公開されることはありません。

この投稿へのトラックバック

トラックバックはありません。

トラックバック URL