crontab

2020年2月25日

スポンサーリンク

crontab(クロンタブ)

crontab(クロンタブ)とは、簡単に言えば、Unix/Linux系において、定時に実行するスケジュール管理ツールです。(サーバー側のバッチ処理を実行するために、定番ツールです。)
マイクロソフトさんのタスクスケジューラと相当するものと考えれば、理解やすいでしょう。(タスクスケジューラを知らない方は、この話を忘れてください。(笑)

crontabファイル

実際に、実行するスケジュール(ジョブ)はcrontabファイルに記載してあります。このファイルは各ユーザー(アカウント)が持っているので、間違いないように、ご注意ください。
よくあるシーンは crontab -l でコマンドを叩いたら、ねぇ!!!頭に真っ白、どういうこと、誰かが削除した、本番環境だよ!ヤバい!!というパニックになっていたことです。
こういう時は、suしますね。(笑)
ファイル場所は、「/etc/crontab」です。同じ場所に、「cron.daily」、「cron.hourly」なども存在しています。深く研究したい方は、調べておきますね。

crontabログ

実行したコマンド、日付、実行ユーザー名などを記録するファイルです。場所は「/var/log/cron」の辺りです。新規リリースしたバッチが実行されてなかった場合、まずはこのログを確認しますね。
実行時間の設定を間違っていた場合が多いと思います。(ログに該当コマンドを出力しない場合、おめでとうございます!間違いなく、実行時間の設定値を間違っていた)

crontabログのサンプル

深く研究したい方は、wwwやcrondなどの意味を調べておきますね。

crontabコマンド

crontabファイルに実行するスケジュール(ジョブ)を追加するために、crontabコマンドを用意しています。
よく使うコマンドは「crontab -l」(設定したスケジュールを表示する)と「crontab -e」(crontabファイルを編集する)と思います。

ほかにもいくつのオプションがありますので、詳しくは、「man crontab」してね。

書き方

まずは、サンプルを見てみましょう。

次は、書き方(フォーマット)は下記の通りです。

「分 時 日 月 曜日 実行したいコマンド」

いかがでしょうか、お分かりになると思います。
上記の例だと、毎日の18時10分に、/bin/bashで「/home/sample/app/batch/sampleBatch/sampleBatch.sh」を実行するとのことです。簡単ですね。
注意して欲しいのは、曜日フィールドの値範囲は「0-6」で、0また7は日曜日のことです。

特殊記号

5分ごとにや月末に実行というちょっと特殊なスケジュール(ジョブ)を実現するために、特殊な書き方(特殊記号)を用意しました。
・「,」コンマ :値のリストを設定できます。 例、 “0,30"
・「-」ハイフン:値の範囲を設定できます。 例、 “1-5"
・「*」アスタリスク:該当フィールドの全ての値を表現する
・「/」スラッシュ:一定値ごとの間隔を表現する (一部のUnix/Linuxはサポートしません、使う前に(調べるより)試してね)

実際の例

■ごく普通に使う例:その1
【毎日18時10分に、bashで、sampleBatch.shを実行する】

■ごく普通に使う例:その1
【月初の0時0分に、bashで、sampleBatch.shを実行する】

■よく使う例:その1
【5分ごとで、bashで、sampleBatch.shを実行する】

■よく使う例:その2
【月曜日~金曜日の18時10分に、bashで、sampleBatch.shを実行する】

■よく使うが、ちょっと難しい例:その1
【月末の19時に、bashで、sampleBatch.shを実行する】

特殊記号だけを使っても実現できないため、コマンドの部分を依存しかできないケースです。
28日から31日に来た場合、その日 + 1日の結果が1日になるなら、月初のことなので、実行します。

■よく使うが、ちょっと難しい例:その2
【 毎月第2水曜日(第n曜日)の19時に、bashで、sampleBatch.shを実行する】

考え方は、上記と同じですね。その日を評価して、trueの場合、実行します。
ちなみに、
第1週は「1-7」
第2週は「8-14」
第3週は「15-21」
第4週は「22-28」
第5週は「29-31」
です。

いかがでしょうか。もっと深く研究したい方や、基本的な知識を勉強したい方は、下記の本を参考しますね。

スポンサーリンク