皆さんも同じような悩みを抱えたことはありませんか? crontab を覚えたての頃は、設定が正しいのか自信が持てず、設定した後に予定どおり実行されるのか不安になるものです。この記事では、crontab が正しく設定されているかを確認する二つの方法を紹介します!

まず、構文エラーについてはそれほど心配いりません。Apache の設定と同じく、書式が間違っていれば、crontab の設定を保存しようとしたときにエラーになり、保存させてもらえません。ただし、設定した時刻が意図どおりかどうかを確認したい場合は話が別です。たとえば「5日ごとに実行される」つもりで設定したのに、実際には「毎月5日に実行される」設定になっていた、というように、両者は大きく違ってきます。笑わないでくださいね。実は私自身も、まさにそのような失敗をしたことがあるのです。

スケジュールを確認する一つ目の方法は、インターネット上にある多くの crontab テスターを使うことです。ここでは、その中の一つ crontab.guru を紹介します。書いたスケジュールの文字列を入力すると、「人が理解できる」形で表示され、「直近 5 回の実行時刻」も確認できます!

二つ目の方法は、オンラインツールがまだ不安な方向けです。Linux では、crontab の実行はすべて syslog に記録されています。そのため、予定どおりの時刻に実行されたかを確認できるほか、スケジュールで実行したプログラムが何か出力していれば、それもここで確認できます。ご注意ください。検索するのは大文字の「CRON」です。小文字で検索すると結果が大きく変わってしまいます!

grep CRON /var/log/syslog*

次のような結果が表示されます:

Jan 20 04:30:01 CODERTW CRON[25813]: (root) CMD (service apache2 restart)

先頭は日付、末尾は実行されたコマンドです。

CRON のログが多すぎる場合は、grep を二段階に組み合わせて、必要な記録だけを絞り込むこともできます。より詳しい書き方は Linux Grep Tips – 指定した文字列を含む行の検索 を参照してください。

grep CRON syslog.1 | grep -E "apache|backup"

注意事項

  1. syslog は複数のファイルに分かれているため、実行の記録が見当たらなくても慌てないでください。圧縮ファイルの中に入っている可能性があります。
  2. 時刻が予定どおりでない場合は、サーバーのタイムゾーン設定を確認してください。Terminal で date と入力すると、現在の時刻を確認できます。