crontab
crontab(クロンタブ)
crontab(クロンタブ)とは、簡単に言えば、Unix/Linux系において、定時に実行するスケジュール管理ツールです。(サーバー側のバッチ処理を実行するために、定番ツールです。)
マイクロソフトさんのタスクスケジューラと相当するものと考えれば、理解やすいでしょう。(タスクスケジューラを知らない方は、この話を忘れてください。(笑)
crontabファイル
実際に、実行するスケジュール(ジョブ)はcrontabファイルに記載してあります。このファイルは各ユーザー(アカウント)が持っているので、間違いないように、ご注意ください。
よくあるシーンは crontab -l でコマンドを叩いたら、ねぇ!!!頭に真っ白、どういうこと、誰かが削除した、本番環境だよ!ヤバい!!というパニックになっていたことです。
こういう時は、suしますね。(笑)
ファイル場所は、「/etc/crontab」です。同じ場所に、「cron.daily」、「cron.hourly」なども存在しています。深く研究したい方は、調べておきますね。
crontabログ
実行したコマンド、日付、実行ユーザー名などを記録するファイルです。場所は「/var/log/cron」の辺りです。新規リリースしたバッチが実行されてなかった場合、まずはこのログを確認しますね。
実行時間の設定を間違っていた場合が多いと思います。(ログに該当コマンドを出力しない場合、おめでとうございます!間違いなく、実行時間の設定値を間違っていた)
crontabログのサンプル
1 2 3 |
Jun 14 01:00:01 www CROND[12980]: (root) CMD (/bin/bash /home/sample/app/batch/sampleBatch/sampleBatch.sh) |
深く研究したい方は、wwwやcrondなどの意味を調べておきますね。
crontabコマンド
crontabファイルに実行するスケジュール(ジョブ)を追加するために、crontabコマンドを用意しています。
よく使うコマンドは「crontab -l」(設定したスケジュールを表示する)と「crontab -e」(crontabファイルを編集する)と思います。
例
ほかにもいくつのオプションがありますので、詳しくは、「man crontab」してね。
書き方
まずは、サンプルを見てみましょう。
1 2 3 |
10 18 * * * /bin/bash /home/sample/app/batch/sampleBatch/sampleBatch.sh |
次は、書き方(フォーマット)は下記の通りです。
「分 時 日 月 曜日 実行したいコマンド」
いかがでしょうか、お分かりになると思います。
上記の例だと、毎日の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 2 3 |
10 18 * * * /bin/bash /home/sample/app/batch/sampleBatch/sampleBatch.sh |
■ごく普通に使う例:その1
【月初の0時0分に、bashで、sampleBatch.shを実行する】
1 2 3 |
0 0 1 * * /bin/bash /home/sample/app/batch/sampleBatch/sampleBatch.sh |
■よく使う例:その1
【5分ごとで、bashで、sampleBatch.shを実行する】
1 2 3 4 |
*/5 * * * * /bin/bash /home/sample/app/batch/sampleBatch/sampleBatch.sh 0,5,10,15,20,25,30,35,40,45,50,55 * * * * /bin/bash /home/sample/app/batch/sampleBatch/sampleBatch.sh |
■よく使う例:その2
【月曜日~金曜日の18時10分に、bashで、sampleBatch.shを実行する】
1 2 3 |
10 18 * * 1-5 /bin/bash /home/sample/app/batch/sampleBatch/sampleBatch.sh |
■よく使うが、ちょっと難しい例:その1
【月末の19時に、bashで、sampleBatch.shを実行する】
1 2 3 |
0 19 28-31 * * /usr/bin/test $(date -d '+1 day' +%d) -eq 1 && /bin/bash /home/sample/app/batch/sampleBatch/sampleBatch.sh |
特殊記号だけを使っても実現できないため、コマンドの部分を依存しかできないケースです。
28日から31日に来た場合、その日 + 1日の結果が1日になるなら、月初のことなので、実行します。
■よく使うが、ちょっと難しい例:その2
【 毎月第2水曜日(第n曜日)の19時に、bashで、sampleBatch.shを実行する】
1 2 3 |
0 19 8-14 * * [ "$(date '+\%w')" -eq 3 ] && /bin/bash /home/sample/app/batch/sampleBatch/sampleBatch.sh |
考え方は、上記と同じですね。その日を評価して、trueの場合、実行します。
ちなみに、
第1週は「1-7」
第2週は「8-14」
第3週は「15-21」
第4週は「22-28」
第5週は「29-31」
です。
いかがでしょうか。もっと深く研究したい方や、基本的な知識を勉強したい方は、下記の本を参考しますね。
ディスカッション
コメント一覧
まだ、コメントがありません