先日、ジョブで実行する予定のスクリプトをcronで実行した際にちょっとハマったので、cronでスクリプトを実行させる際に気をつけたい事をまとめることにした。

1.パスは絶対パス指定で書くこと

スクリプト本体や引数でファイルを指定する場合は、相対パスでの記述だとうまく動作しない事があるため、絶対パス指定で記述をする。
これはスクリプトのソースにも当てはまるので、うまく動かない場合はスクリプト内で相対パスで記述されていないかを確認してもらいたい。

2.cronのログを確認する

無事に動作しているか、cronのログを確認する。
cronのログはOSによって書き出される場所が違う。

  • RHEL系の場合 … /var/log/cron
  • Debian/Ubuntuの場合 … /var/log/syslog
  • Solarisの場合 … /var/cron/log
  • HP-UXの場合 … /var/adm/cron/log
  • AIXの場合 … /var/adm/cron/log

3.LANGの違い

cronでは環境変数LANGの設定がされていないため、スクリプト内で日本語が利用されている場合は対応する必要がある。
実行内容を記述する際に、以下のようにする。

* * * * * export LANG=ja_JP.UTF-8; スクリプトのパス

※exportで指定しているLANGの値は、スクリプトで記述されている文字コードに併せて変更すること。

上記の書き方の他、cronの最初にLANGを宣言する事で、cronで実行される全てに設定を適用することも出来る。

LANG=ja_JP.UTG-8
* * * * * スクリプトのパス
…

4.メッセージの出力を抑える

cronでただスクリプトを実行すると、cronの実行結果などがメールされてしまう。
これを抑えるため、スクリプトのパス以降に、以下のように記述すると良いだろう。

* * * * * スクリプトのパス >/dev/null 2>&1