Solaris のシステム管理

繰り返されるシステムイベントのスケジューリング (cron)

以降の各項で、crontab ファイルをどのように作成、編集、表示、削除するか、さらに、それらのファイルへのアクセスをどのように制御するかを説明します。

crontab ファイルの内容

cron デーモンは、各 crontab ファイル内にあるコマンドに従ってシステムイベントをスケジュールします。crontab ファイルには、それぞれ一定間隔で実行されるコマンドが 1 行に 1 つずつ入っています。各行の先頭は cron デーモンが各コマンドを実行する日時情報です。

たとえば、SunOS ソフトウェアのインストール時に root という名前の crontab ファイルが提供されますが、このファイルの内容は次のとおりです。

0 20 * * 0,4 /etc/cron.d/logchecker
 5  4 * * 0   /usr/lib/newsyslog
15  3 * * *   /usr/lib/fs/nfs/nfsfind
 1  2 * * *  [ -x /usr/sbin/rtc ] && /usr/sbin/rtc -c > /dev/null 2>&1

最初のコマンド行は、日曜日と木曜日の午後 10 時に logchecker を実行するようシステムに指示します。2 番目のコマンド行は、毎日曜日の午前 4 時 5 分に newsyslog を実行するようにシステムをスケジュールします。3 番目のコマンド行は毎日午前 3 時 15 分に nfsfind を実行するようにシステムに指示します。4 番目のコマンド行は、夏時間をチェックして、必要であれば修正するようにシステムに指示します。RTC タイムゾーンも /etc/rtc_config ファイルもない場合、このエントリは何もしません。

crontab ファイル内のコマンド行の構文の詳細については、crontab ファイルエントリの構文」を参照してください。

crontab ファイルは /usr/spool/cron/crontabs (または、/var/spool/cron/crontabs) に格納されます。SunOS ソフトウェアのインストール時には、root 以外にもいくつかの crontab ファイルが提供されます (表 59-2 を参照してください)。

表 59-2 デフォルトの crontab ファイル

crontab ファイル

機能 

adm

アカウンティング 

lp

印刷 

root

一般的システム機能と 

ファイルシステムの整理 

sys

性能情報の収集 

その他の crontab ファイルは、それらの中に作成されるユーザーのアカウントに基づいて、bobmarysmithjones などのように命名されます。

デフォルトの crontab ファイルの他に、ユーザーは crontab ファイルを作成してそれぞれユーザー自身のシステムイベントをスケジュールできます。root または他のユーザーが所有する crontab ファイルにアクセスするには、スーパーユーザーの特権が必要です。

crontab ファイルを作成、編集、表示、削除する手順については、「システムイベントのスケジューリング用コマンド」で説明します。

cron デーモンのスケジューリング

cron デーモンは crontab コマンドの自動スケジューリングを行います。このデーモンの機能は、通常 15 分おきに、/usr/spool/cron/crontabs ディレクトリ (または、システム構成によっては /var/spool/cron/crontabs ディレクトリ) を調べて crontab ファイルがないか確認します。新しい crontab ファイルがないか、既存の crontab が変更されていないかを確認し、いずれかがあった場合は、ファイル内のリストから実行時刻を読み取り、コマンドが正しい時刻に実行されるよう指示します。

ほとんど同様に、cron デーモンは /usr/spool/cron/atjobs ディレクトリ内の at ファイルのスケジューリングを制御します。

crontab ファイルエントリの構文

crontab ファイルは、1 行に 1 つのコマンドが入った構成になっています。これらのコマンド行の最初の 5 つのフィールドには、コマンドが実行される時刻を指定し、それぞれスペースで区切ります。表 59-3 にこれら 5 つのフィールドを示します。

表 59-3 crontab 時刻フィールドの値

時刻フィールド 

値 

分 

0-59 

時 

0-23 

日 

1-31 

月 

1-12 

曜日 

0 - 6 (0 は日曜日) 

次に、crontab 時刻フィールドで特殊文字を使用する際のガイドラインを示します。

たとえば、次の crontab コマンドエントリの例は、毎月 1 日と 15 日の午後 4 時に、ユーザーのコンソールウィンドウに注意を促すメッセージを表示します。

0 16 1,15 * * echo Timesheets Due > /dev/console

crontab ファイル内の各コマンドは、長くても 1 行内に入れなければなりません。それは、crontab が 2 番目以降のキャリッジリターンを認識しないからです。(つまり、複数行とした場合は、同じコマンドとはみなされないということです。) crontab のエントリとコマンドオプションの詳細については、crontab(1) のマニュアルページを参照してください。