Solaris のシステム管理 (上級編)

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

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

crontab ファイルの内容

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

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


10 3 * * * /usr/sbin/logadm
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 分に logadm コマンドを実行します。2 行目は、毎週日曜日の午前 3 時 15 分に nfsfind スクリプトを実行します。3 行目は、毎日午前 2 時 10 分に夏時間をチェック (して必要に応じて修正) するスクリプトを実行します。RTC タイムゾーンも /etc/rtc_config ファイルもない場合、このエントリは何もしません。4 行目は、毎日午前 3 時 30 分に Generic Security Service テーブル /etc/gss/gsscred_db の重複エントリをチェック (重複エントリがある場合は削除) します。

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

crontab ファイルは、 /var/spool/cron/crontabs ディレクトリに保存されます。SunOS ソフトウェアのインストール時には、root 以外にもいくつかの crontab ファイルが提供されます (表 18–2 を参照してください)。

表 18–2 デフォルトの crontab ファイル

crontab ファイル

機能 

adm

アカウンティング 

lp

印刷 

root

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

sys

パフォーマンス情報の収集 

uucp

一般的な uucp の整理

デフォルトの crontab ファイルの他に、ユーザーは crontab ファイルを作成してユーザー自身のシステムタスクをスケジュールできます。その他の crontab ファイルは、それらの中に作成されるユーザーのアカウントに基づいて、bobmarysmithjones などのように命名されます。

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

crontab ファイルの作成、編集、表示、削除の手順については、以降の節で説明します。

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

cron デーモンは crontab コマンドの自動スケジューリングを管理します。cron デーモンは、通常、15 分ごとに /var/spool/cron/crontab ディレクトリに crontab ファイルがあるかどうかをチェックします。cron デーモンは、新しい crontab ファイルがないか、既存の crontab が変更されていないかを確認し、いずれかがあった場合は、ファイル内のリストから実行時刻を読み取り、正しい時刻にコマンドを実行します。

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

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

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

表 18–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 が余分なキャリッジリターンを認識しないからです。crontab のエントリとコマンドオプションの詳細は、crontab(1) のマニュアルページを参照してください。