08:プログラムのスケジューリング(cron)

■cron とは
cron は決められた時間にプログラムを実行する (プログラムのスケジューリング)デーモンです。cron を使用することで、例えば毎日22時に特定のプログラムを実行するなどの処理が可能です。cron は crontab(cron table) と呼ばれるファイルを参照し、そのファイルに記述した決められた時間にプログラムを実行します。 SVシリーズ ではユーザごとに自由に cron の設定が可能です。

■crontab ファイルの作成
cron によるプログラムのスケジューリングを実行するには、 その実行内容を記述した crontab ファイルを作成する必要があります。SVサーバでは、ユーザごとに cron の設定が可能ですので、 その cron を実行するユーザごとに crontab ファイルを作成します。crontab ファイルでは、環境変数の設定とプログラムの スケジューリングの設定を行います。

■環境変数の設定
crontab ファイル 内での 環境変数の設定は次のような形で行います。
name(環境変数名) = value(環境変数の値)

例:MAILTO="MAIL@ADDR.ESS"
環境変数の設定で最も重要な設定が、MAILTO の設定になります。環境変数 MAILTO の値にはメールアドレスを指定しますが、 環境変数 MAILTO を設定した場合、 cron の実行結果を MAILTO で指定した メールアドレスへメールを送信します。 環境変数 MAILTO は以下の書式で設定します。MAIL@ADDR.ESS には、corn の実行結果を送信するメールアドレスを指定します。
MAILTO="MAIL@ADDR.ESS"
環境変数 MAILTO 以外にも SHELL や LOGNAME 、HOME など、crontab ファイル内で設定可能な環境変数はいくつかありますが、 それらの環境変数は cron が自動的に設定するため、通常はあまり用いることはありません。

■スケジューリングの設定
crontab ファイル 内での スケジューリングの設定は、次のような形で行います。
実行時間(タイムフィールド) 実行するプログラム

例:15 1 * * * /bin/date
プログラムの実行時間を設定するタイムフィールドは、 以下の順序で、それぞれ間に空白を入れて設定します。
分 時 日 月 曜日
例えば、10月1日 水曜日の 11:30 にプログラムを実行する場合、以下のように設定します。
30 11 1 10 3(もしくは wed)
タイムフィールドの、曜日、月、日、時、分の値は それぞれ以下のように設定可能です。
フィールド名
設定可能な値
(0ら59分)
(0時から23時)
(1日から31日)
(1月から12月)
※jan や feb のように英字3字での省略形でも設定可能です。

曜日
日曜日
0もしくは7
月曜日
1
火曜日
2
水曜日
3
木曜日
4
金曜日
5
土曜日
6
※sun や wed のように英字3字での省略形でも設定可能です。
タイムフィールドの値を複数指定する場合は、以下のように指定します。

・ 複数指定 , (カンマ)区切りで複数の値を設定することができます。 例えば時間のフィールドに 10,15,20 と指定した場合、「10時、15時、20時に実行」を指定したことになります。

・ 範囲指定 - (ハイフン)で範囲指定ができます。 例えば曜日のフィールドに 1-5 と指定した場合、「月曜日から金曜日に実行」を指定したことになります。

・ワイルドカー ド * を指定することで、その範囲の全てを指定することができます。 例えば月のフィールドに * を指定することで、1-12 と指定するのと同じように「毎月実行」を指定したことになります。

また、タイムフィールドでは「○○おきに実行」を意味する間隔値を指定することが可能です。 間隔値を指定するには、タイムフィールドの値に加えて /間隔値 と指定します。

例えば、「10分おきに実行」を指定する場合、分フィールドに 0,10,20,30,40,50 と指定しても可能ですが、 */10 と指定することで「10分おきに実行」を指定したことになります。

crontab ファイルの例

# cron の実行結果を mail@example.com にメールをします。
MAILTO="mail@example.com"

# 毎日の午前1時15分に [COMMAND] を実行する場合。
15 1 * * * [COMMAND]

# 毎月1日の午後11時40分に [COMMAND] を実行する場合。
40 23 1 * * [COMMAND]

# 月曜から金曜(1-5)の、午前9時と午後5時(9,17)の0分から30分の間の10分おきに(0-30/10) [COMMAND] を実行する場合。
0-30/10 9,17 * * 1-5 [COMMAND]

# 1月(jan)の毎日曜日(sun)、1〜24時の間の4時間おき(*/4)に [COMMAND] を実行する場合。
0 */4 * jan sun [COMMAND]

# 毎月1日と15日と20〜30日の午前4時30分に [COMMAND] を実行する場合。
30 4 1,15,20-30 * * [COMMAND]
 
■crontab ファイルの登録

作成した crontab ファイルは任意のファイル名でサーバに保存し、crontab コマンドでを実行することで正しく登録され cron が実行されます。crontab ファイルの登録を行うには、以下のコマンドを実行します。

% crontab <Enter>

例えば、/etc/crontab ファイルの内容を cron に登録する場合、 以下のコマンドを実行します。

% crontab /etc/crontab <Enter>
 
■cron 登録内容の確認と cron 登録内容の削除

cron 設定内容の確認を行うには以下のコマンドを実行します。

% crontab -l

cron 設定内容の削除を行うには以下のコマンドを実行します。

% crontab -r

上記コマンド実行後

remove crontab for <USERID>?

と削除確認のメッセージが表示されます。
y を入力することで cron設定内容が削除されます。

cron に関するドキュメント
cron に関しての詳細は、以下のページを参照ください。
FreeBSD 日本語マニュアル -cron-

日本語マニュアル -crontab-