Solaris のシステム管理 (第 2 巻)

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

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

crontab ファイルの内容

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

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


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

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

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

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

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

crontab ファイル

機能 

adm

アカウンティング 

lp

印刷 

root

一般的なシステム機能とファイルシステムの整理 

sys

性能情報の収集 

uucp

一般的な uucp の整理 

デフォルトの crontab ファイルの他に、ユーザーは crontab ファイルを作成してユーザー自身のシステムイベントをスケジュールできます。

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

root または他のユーザーが所有する crontab ファイルにアクセスするには、スーパーユーザーの特権が必要です。

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

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

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

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

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

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

表 30-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) のマニュアルページを参照してください。