crontabがどうしても動かないときに確認すべき3つの点+α

とりあえずここではCentOS5.3に標準で入ってたcronでの話ということで

  1. crondは動いているか
  2. 実行ファイルの権限は正しいか
  3. cronのログを確認すべし


ということで

  • crondは動いていますか?
# /etc/rc.d/init.d/crond status
crond (pid xxx) を実行中...

で動いているか確認

# chkconfig --list crond
crond           0:off   1:off   2:on    3:on    4:on    5:on    6:off

で2-5番までonになっていますか?

  • 実行ファイルの権限は正しいですか?
ls -al | grep test
-rwxrwxr-x  1 hoge hoge 2615380  3月 10 01:54 test.jar

で実行したいファイルの実行権限を確認してみましょう
ちなみにここでは
最初のrwxはファイル所有者の権限
 次のrwxはファイル所有者の属するグループの権限
最後のr-xはその他の権限
みんな実行権限(x)は持っているようなので問題ないですね

権限が正しくない場合は

chmod a+x file1

などで実行権限を設定しましょう(chmodってユーザ名の指定ってできないんですかね?)

  • cronのログを確認すべし
# vi /var/log/cron

でcronのログを確認しましょう
何かエラーをはいていませんか?

※それでもダメなら
それでもダメな場合実行した内容にエラーがある可能性があります
cronのログはあくまでcron自体が実行できればエラーログをはくことはありません(実行した内容にエラーがあってもcronのログには残りません)

*/30 * * * * /bin/sh /home/hoge/fuba.sh >>/tmp/analog.log 2>>/tmp/analog-err.log

このように

コマンド >>log.log 2>>errlog.log

とコマンドの後に >> や 2>> とすると標準出力や標準エラー出力のログを指定したファイルに記録してくれます
ちなみに 1>>は標準出力(1は省略可) 2>>は標準エラー出力です

javaなどはパスの設定に失敗して、cronの書き方はあっているのに実行ファイル内でエラーが出てあたかもcronがうまく動いていないかのような挙動になってしまうことが多いです。そういう時はcrontabに上記のログをとるようにして何処に問題があるのかを突き止めてみるといいかもしれません!