cron(クローン、クロン、クーロン)は、Unix系OSにおいて、crontabの内容に従って、決められた日時にコマンドなどを実行します。
crond は、crontab (クロンタブ、クローンタブ、クーロンタブ)コマンドで編集されたスケジュールを管理して指定された時間に実行を行います。
ログの集計や定期バックアップ、ある決まった時間にプログラムやスクリプトを動作させたい場合に便利です。
スポンサードリンク
設定方法は2種類あります。
です。
crontabコマンドのオプションには次のようなものがあります。
-e | crontabファイルの編集を行います。環境変数EDITORで指定されているエディタが起動します |
-l | crontabファイルの内容を表示します |
-r | crontabファイルを削除します。コマンドを実行すると再確認なしで削除されます |
-u ユーザー | 指定したユーザーのcron設定を行います。rootのみが使用できます |
$ crontab -l 00 10 * * 4 /usr/bin/wget http://www.google.com 00 11 * * 4 /usr/bin/wget http://www.yahoo.com
$ crontab -e
環境変数EDITORで指定されているエディタが起動します。
$ crontab -r
crontabファイルを削除します。コマンドを実行すると再確認なしで削除されます。
# コメント 分 時 日 月 曜日 コマンドやスクリプト
分 | 1桁、あるいは2桁の数字(0?59)。ワイルドカード(*)を指定すると毎分。 |
日 | 1桁、あるいは2桁の数字(0?23)。ワイルドカード(*)を指定すると毎時。 |
月 | 1桁、あるいは2桁の数字(1?12)。または、3文字のテキスト(jan、decなど)。ワイルドカード(*)を指定すると毎月。 |
曜日 | 1桁の数字(0?7)、0と7は日曜日。または、3文字のテキスト(sun、monなど)。ワイルドカード(*)を指定すると毎日。 |
コマンドやスクリプト | 実行するコマンドやスクリプトを指定。 |
また、間隔値(指定間隔に一度、処理を実行)を設定できます。
設定例 | コメント | |
---|---|---|
リスト | 0,15,30,45 | 分フィールドで指定した場合、15分に一度処理を実行します。 |
範囲 | 1-5 | 曜日フィールドで指定した場合、月曜日~金曜日に処理を実行します。 |
共存 | 1,3,7-9 | 時間フィールドで指定した場合、1時、3時、7時、8時、9時に処理を実行します。 |
間隔値 | 1-5/2 | 時間フィールドで指定した場合、1時、3時、5時に処理を実行します。なお、間隔値は、「/」の後ろに指定した値の間隔で処理を実行します。 |
cronは毎分このcrontabファイルをチェックし、分・時・月が現在時刻と一致し、かつ日と曜日フィールドの2つのいずれかが現在時刻と一致すればコマンドを実行します。
色々な例を載せておきます。
説明 | 記載方法 |
---|---|
0分ごとに実行する | 0 * * * * [コマンド] |
5分おきに実行する | */5 * * * * [コマンド] |
1日1回、0時0分に実行する | 0 0 * * * [コマンド] |
0時から23時までの2時間おきに、毎23分ごとに実行する | 23 * 0-23/2 * * [コマンド] |
1月と12月それぞれの1~20日、23時0分に実行する | * 23 1-20 1,12 * [コマンド] |
日曜日(0)から土曜日(6)まで1分おきに実行する | */1 * * * 0-6 [コマンド] |
毎日、日付変更の 5 分後にを実行する | 5 0 * * * [コマンド] |
毎月初日の 2:15pm に実行する | 15 14 1 * * [コマンド] |
週末の午後 10 時に実行する | 0 22 * * 15 [コマンド] |
毎日 0,2,4..時 23 分に実行する | 23 0/2 * * * [コマンド] |
日曜 4 時 5 分に実行する | 5 4 * * sun [コマンド] |
スポンサードリンク
0 5 1-10 1,2 * hoge /path/command
1 0 * * 6,0 hoge /path/command
55 23 28-31 * * /usr/bin/test $( date -d '+1 day' +\%d ) -eq 1 && /path/command
28~31日の間のみ、testコマンドで最終日かを判定しています。
0 0 * * 5 /usr/bin/test $( date '+\%m' ) -ne $( date -v+7d '+\%m' ) && /path/command 0 0 * * 5 /usr/bin/test $( date +\%m ) -ne $( date --date '7 day' +\%m ) && /path/command
金曜日のときにtestコマンドとdateコマンドを使い判定しています。dateコマンドのバージョン等により使い分ける必要があります。
例として「毎日10時~11時の間に /path/command を実行する」方法です。
0 10 * * * sleep `expr $RANDOM \% 3600`; 実行したいコマンド
10時に実行し、0~3599秒はスリープしています。「'(シングルクォート)」ではなく「`(バッククォート)」を使って記述します。
ただし「毎日10時」から「0~3599秒」の間、「呼出したシェル」と「sleep」の2つのプロセスが常駐するためメモリが消費されます。
複数のコマンドを5分おきに実行させたい、しかし同時に実行するとマシンや回線に負荷がかかり、サーバーダウンだと誤認識してしまうかもしれません。
その場合は、コマンドが起動するタイミングを変えれば大丈夫です。
# 複数のコマンドを5分おきに実行 0-55/5 * * * * コマンド1 1-56/5 * * * * コマンド2 2-57/5 * * * * コマンド3 3-58/5 * * * * コマンド4 4-59/5 * * * * コマンド5
$ sudo service crond start #cronの起動 $ sudo service crond status #cronのステータス確認 $ sudo service crond stop #cronの停止
$ sudo service cron start #cronの起動 $ sudo service cron status #cronのステータス確認 $ sudo service cron stop #cronの停止
コマンドが異なるため、間違えると次のように「No such file or directory」となります。
hoge@hoge-ubuntu:~$ sudo service crond status crond.service Loaded: not-found (Reason: No such file or directory) Active: inactive (dead)
スポンサードリンク