このエントリーをはてなブックマークに追加
スポンサーリンク

crontabの設定

crontabとは

定期的にメンテナンスコマンドを実行する場合、たとえば、analogなどのログの集計や定期バックアップをする場合、わざわざ人間が定期的にtelnetでログインしてコマンドを手打ちしていたのでは、非常に面倒です。

そこで、ある決まったスケジュールでコマンドを実行できるように設定することができます。これがcrontbです。

crontabの設定方法

crontab -e と入力すると画面がviになりcrontabのスケジュールを編集することができます。しかし、Windows使いにとって、viをまったく操作ができない人もしばしば見られます。そこで、あらかじめWindowsのテキストファイルでファイルを編集し、それをFTPでアップロードしたものを使うこともできます。

crontab ファイル名

たとえば、スケジュールを /home/crontab.txt に入れた場合、

crontab /home/crontab.txt

とすることで、crontabのスケジュールを設定することができます。

書式


【書式】
分 時 日 月 曜日 コマンド

例)
30 * * * * /home/aufheben/analog.sh

毎時「30分」にanalog.shを実行します。
ここで、*は「〜に関係なく」と読んでください。つまり、30 * * * *は、「30分、時に関係なく、日に関係なく、月に関係なく、曜日に関係なく」です。なので、それを日本語っぽく言い直すと「月(つき)、日(ひ)、曜日(ようび)、時(じ)に関係なく30分に」コマンドが実行されます。したがって、

0時30分
1時30分
2時30分



と、毎時30分になるとコマンドが実行されます。

・曜日を指定する場合
0が日曜日で、1が月曜日……6が土曜日になります。

0 0 13 * 5 コマンド

とすれば「13日の金曜日の0時0分」にコマンドが実行されます。

・1時と3時と5時に実行する場合
時や分を複数記述する場合、カンマで区切ります。たとえば1時と3時と5時のそれぞれ0分に実行するなら、

0 1,3,5 * * * コマンド

とします。

・3分ごとに実行する場合
もし3分ごとに実行する場合、0,3,6,9,12と3分ごとの分を書いていたのでは、設定が長く煩わしいものになってしまいます。そこで、*/3と書くことで「3分おき」と設定することができます。

*/3 * * * * コマンド

で、3分おきにコマンドを実行します。同様に、3時間ごとに実行するのであれば、

* */3 * * * コマンド

となります。ただ、「1時間ごと」と設定するのであれば、

0 * * * * コマンド

のように、分だけ書いておいて後を*にした方がわかりやすいと思います。

・タイミングをずらす場合
複数のコマンドを5分おきに実行させたい、しかし、同時に実行されると困る、というケースがあります。例えば、MRTG等のサーバーを監視するコマンドを、 複数個5分おきに発動させる場合、全サーバー同時に毎時0分5分10分15分…に確認して、他の時間は何もしないという方式だったとします。

すると、全サーバーを同時に監視しにいったせいで回線に負荷がかかり、PINGのロスが非常に多く測定されたりします。下手するとサーバーダウンだと誤認識してしまうかもしれません。

そこで、コマンドが起動するタイミングをずらします。

0-55/5 * * * * コマンド1
1-56/5 * * * * コマンド2
2-57/5 * * * * コマンド3
3-58/5 * * * * コマンド4
4-59/5 * * * * コマンド5

とすると、コマンド1は毎時0分から55分の間に5分ずつ実行されます。同様に、コマンド2は毎時1分から56分の間に…という具合になります。つまり、コマンド1は0分、5分、10分、15分…に実行され、コマンド2は毎時1分、6分、11分、16分…に実行されます。こうする事で、コマンド1〜5が同時に実行される事を防ぎます。

ただし、コマンドに5分以上かかる場合はタイミングを5分おきにではなく、そのコマンドにかかる時間(平均ぐらいで)にしておきます。また、絶対に同時に起動してはいけないのであれば、別途ロックファイル等で処理する必要はあります。
スポンサーリンク