コンソールで叩くと動くスクリプトがCronで動かない時

2011-08-25
かなり古い記事です。現在も有効な内容であるかどうか分かりませんのでご注意ください。

以下のサイトが参考になった。

原因究明は以下の順番で。

  • ログを見て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

Profile

フルスタック気味のフリーランスプログラマー。

どちらかと言うと得意はインフラ構築とサーバーサイドプログラミングですが、フロントエンドもぼちぼちやっています。

最近の興味範囲はWordPress、AWS、サーバーレス、UIデザイン。

愛車はセロー。カメラはペンタックス。旅好きです。横浜在住。