この章では、システムのシャットダウンとブートに関するガイドラインを示し、実行レベルとブートファイルについて説明します。
この章で説明する手順は次のとおりです。
この章で説明する主な内容は次のとおりです。
システムの「実行レベル」 (init 状態ともいう) は、ユーザーが使用できるサービスと資源を定義します。システムが 1 度に持つことのできる実行レベルは 1 つだけです。
Solaris ソフトウェア環境には 8 つの実行レベルがあります (表 6-1参照)。デフォルトの実行レベル 3 は、/etc/inittab ファイルに指定されています。
表 6-1 Solaris 実行レベル
who -r コマンドを使用してシステムの実行レベル情報を表示すれば、システムの実行レベルがわかります。ただし、実行レベル 0 を除きます。
$ who -r |
$ who -r . run-level 3 Oct 26 15:04 3 0 S $ |
|
実行レベル 3 |
現在の実行レベル。 |
|
Oct 26 15:04 |
実行レベルが最後に変更された日時。 |
|
3 |
現在の実行レベル。 |
|
0 |
最後にリブートしてからこの実行レベルになった回数。 |
|
S |
以前の実行レベル。 |
init または shutdown コマンドを使用してシステムをブートしたり実行レベルを変更したりすると、init デーモンは、/etc/inittab ファイルから情報を読み取ってプロセスを起動します。/etc/inittab ファイルには、init プロセスにとって重要な 3 つの情報が定義されています。
システムのデフォルトの実行レベル
起動、監視するプロセス、および停止時に再起動するプロセス
システムが新しい実行レベルに移行したとき行う処理
/etc/inittab ファイル内の各エントリは、次のフィールドからなります。
id:rstate:action:process
表 6-2 に、inittab エントリの各フィールドを要約します。
表 6-2 inittab ファイルのフィールド|
フィールド |
説明 |
|---|---|
|
id |
エントリに固有の (一意の) 識別子。 |
|
rstate |
このエントリが適用される実行レベルのリスト。 |
|
action |
プロセスフィールドに指定されたプロセスの実行方法。指定できる値は、initdefault、sysinit、boot、bootwait、wait、および respawn。 |
|
process |
実行するコマンド。 |
以下の例は、デフォルトの inittab ファイルです。
ap::sysinit:/sbin/autopush -f /etc/iu.ap ap::sysinit:/sbin/soconfig -f /etc/sock2path fs::sysinit:/sbin/rcS sysinit >/dev/console 2<>/dev/console </dev/console is:3:initdefault: p3:s1234:powerfail:/usr/sbin/shutdown -y -i5 -g0 >/dev/console 2<>/dev/console sS:s:wait:/sbin/rcS >/dev/console 2<>/dev/console </dev/console s0:0:wait:/sbin/rc0 >/dev/console 2<>/dev/console </dev/console s1:1:respawn:/sbin/rc1 >/dev/console 2<>/dev/console </dev/console s2:23:wait:/sbin/rc2 >/dev/console 2<>/dev/console </dev/console s3:3:wait:/sbin/rc3 >/dev/console 2<>/dev/console </dev/console s5:5:wait:/sbin/rc5 >/dev/console 2<>/dev/console </dev/console s6:6:wait:/sbin/rc6 >/dev/console 2<>/dev/console </dev/console fw:0:wait:/sbin/uadmin 2 0 >/dev/console 2<>/dev/console </dev/console of:5:wait:/sbin/uadmin 2 6 >/dev/console 2<>/dev/console </dev/console rb:6:wait:/sbin/uadmin 2 1 >/dev/console 2<>/dev/console </dev/console sc:234:respawn:/usr/lib/saf/sac -t 300 co:234:respawn:/usr/lib/saf/ttymon -g -h -p "`uname -n` console login: " -T sun -d /dev/console -l console -m ldterm,ttcompat |
init プロセスが起動されます。init プロセスは、/etc/default/init ファイルを読み取って環境変数を設定します。デフォルトでは、TIMEZONE 変数だけが設定されます。
init は inittab ファイルを読み取って、次の処理を行います。
デフォルトの実行レベル 3 を定義する initdefault エントリを識別します。
action フィールドが sysinit になっているすべてのプロセスエントリを実行して、ユーザーがログインする前に特別な初期設定処理がすべて行われるようにします。
rstate フィールドが 3 になっている (デフォルトの実行レベル 3 と一致する) プロセスエントリを実行します。
init プロセスが inittab ファイルを使用する方法についての詳細は、init(1M) のマニュアルページを参照してください。
表 6-3 に、実行レベル 3 の action フィールドで使用するキーワードについて説明します。
表 6-3 実行レベル 3 の action キーワードの説明|
キーワード |
指定されたプロセスの実行方法 |
|---|---|
|
powerfail |
システムが電源切断シグナルを受信したときだけプロセスを実行する。 |
|
wait |
指定されたプロセスの終了を待つ。 |
|
respawn |
プロセスがまだ起動されていない場合は起動する。プロセスがすでに起動されている場合は、inittab ファイルの検索を続ける。 |
表 6-4 に、実行レベル 3 で実行されるプロセス (またはコマンド) について説明します。
表 6-4 実行レベル 3 のコマンドの説明|
コマンドまたはスクリプト名 |
説明 |
|---|---|
|
/usr/sbin/shutdown |
システムをシャットダウンする。init プロセスは、システムが powerfail シグナルを受信した場合にのみ shutdown コマンドを実行する。 |
|
/sbin/rcS |
ルート (/)、 /usr、 /var、 /var/adm のファイルシステムをマウントしてチェックする。 |
|
/sbin/rc2 |
標準のシステムプロセスを起動して、システムを実行レベル 2 (マルチユーザーモード) に移行する。 |
|
/sbin/rc3 |
実行レベル 3 で使用される NFS 資源共有を開始する。 |
|
/usr/lib/saf/sac -t 30 |
ポートモニターと UUCP 用のネットワークアクセスを起動する。このプロセスは失敗すると再起動される。 |
|
/usr/lib/saf/ttymon -g -h -p "`uname -n` console login: " -T terminal_type -d /dev/console -l console |
コンソールでのログイン要求を監視する ttymon プロセスを起動する。 このプロセスは失敗すると再起動される。SPARC システムの terminal_type は sun である。 x86 システムの terminal_type は AT386 である。 |
Solaris ソフトウェア環境では、一連の詳細な実行制御 (rc) スクリプトを使用して実行レベルの移行を制御しています。各実行レベルには次の rc スクリプトが対応しています。これらのスクリプトは、/sbin ディレクトリにあります。
rc0
rc1
rc2
rc3
rc5
rc6
rcS
/sbin ディレクトリ内の各 rc スクリプトには /etc/rcn.d という名前のディレクトリが対応しており、その中にはその実行レベルのさまざまな処理を実行するスクリプトがあります。たとえば、/etc/rc2.d には、実行レベル 2 のプロセスを起動および停止するためのファイル (スクリプト) があります。
# ls /etc/rc2.d K20spc@ S70uucp* S80lp* K60nfs.server* S71rpc* S80spc@ K76snmpdx* S71sysid.sys* S85power* K77dmi* S72autoinstall* S88sendmail* README S72inetsvc* S88utmpd* S01MOUNTFSYS* S73nfs.client* S89bdconfig@ S05RMTMPFILES* S74autofs* S91leoconfig* S20sysetup* S74syslog* S92rtvc-config* S21perf* S74xntpd* S92volmgt* S30sysid.net* S75cron* S93cacheos.finish* S47asppp* S76nscd* S99audit* S69inet* S80PRESERVE* S99dtlogin* |
/etc/rcn.d 内のスクリプトは常に、スクリプト名を ASCII 文字列としてソートした順に実行されます。スクリプト名の形式は次のとおりです。
[KS][0-9][0-9]*
名前が K で始まるスクリプトを実行すると、システムプロセスが終了 (kill) します。名前が S で始まるスクリプトを実行すると、システムプロセスが起動されます。
実行制御スクリプトは、/etc/init.d ディレクトリにもあります。これらのファイルは、/etc/rcn.d ディレクトリ内の対応する実行制御スクリプトにリンクされています。
各実行制御スクリプトの処理について、表 6-5 から表 6-10 に要約を示します。
実行レベルごとに対応するスクリプトを持つことの利点は、/etc/init.d ディレクトリ内の個々のスクリプトを実行することにより、システムの実行レベルを変更しないで (現在の実行レベルの) 機能を停止できる点です。
スーパーユーザーになります。
# /etc/init.d/filename stop |
機能を再開します。
# /etc/init.d/filename start |
pgrep コマンドを使用して、サービスが停止または起動しているかを確認します。
# pgrep -f service |
NFS サーバーの機能を停止するには、次のように入力します。
# /etc/init.d/nfs.server stop # pgrep -f nfs # |
NFS サービスを再開するには、次のように入力します。
# /etc/init.d/nfs.server start # pgrep -f nfs 141 143 245 247 # pgrep -f nfs -d, | xargs ps -fp root 141 1 40 Jul 31 ? 0:00 /usr/lib/nfs/statd root 143 1 80 Jul 31 ? 0:01 /usr/lib/nfs/lockd root 245 1 34 Jul 31 ? 0:00 /usr/lib/nfs/nfsd -a 16 root 247 1 80 Jul 31 ? 0:02 /usr/lib/nfs/mountd |
サービスを起動または停止するための実行制御スクリプトを追加するには、そのスクリプトを /etc/init.d ディレクトリにコピーして、rcn.d ディレクトリ内の適切なファイルへのリンクを作成します。
実行制御スクリプトの命名法についての詳細は、/etc/rcn.d ディレクトリ内の README ファイルを参照してください。以下に、実行制御スクリプトの追加方法を説明します。
スーパーユーザーになります。
スクリプトを /etc/init.d ディレクトリにコピーします。
# cp filename /etc/init.d # chmod 0744 /etc/init.d/filename # chown root:sys /etc/init.d/filename |
適切な rcn.d ディレクトリへのリンクを作成します。
# cd /etc/init.d # ln filename /etc/rc2.d/Snnfilename # ln filename /etc/rcn.d/Knnfilename |
ls コマンドを使用して、スクリプトが指定されたディレクトリ内のファイルにリンクされているかどうかを確認します。
# ls /etc/init.d/ /etc/rc2.d/ /etc/rcn.d/ |
# cp xyz /etc/init.d # cd /etc/init.d # ln xyz /etc/rc2.d/S100xyz # ln xyz /etc/rc0.d/K100xyz # ls /etc/init.d /etc/rc2.d /etc/rc0.d |
実行制御スクリプトを無効にするには、スクリプト名の先頭にドット (.) を付けます。ドットで始まるファイルは実行されません。接尾辞を追加してファイルをコピーすると、両方のファイルが実行されます。
スーパーユーザーになります。
スクリプト名の先頭に下線 ( _ ) を付けて、スクリプト名を変更します。
# cd /etc/rcn.d # mv filename _filename |
スクリプト名が変更されたことを確認します。
# ls -a _filename |
次の例は、S100datainit というスクリプト名を変更しますが、元のスクリプトも保存しています。
# cd /etc/rc2.d # mv S100datainit _S100datainit |
|
スクリプト名 |
説明 |
|---|---|
|
/sbin/rc0 |
以下の作業を実行する。 |
|
|
|
表 6-6 /sbin/rc1 スクリプト
|
説明 |
|
|---|---|
|
/sbin/rc1 |
/etc/rc1.d ディレクトリ内のスクリプトを実行して以下の作業を実行する。 |
|
|
|
表 6-7 /sbin/rc2 スクリプト
実行レベル 2 で起動されるシステムサービスとアプリケーションの多くは、システム上にインストールされているソフトウェアによって決まります。
|
スクリプト名 |
説明 |
|---|---|
|
/sbin/rc3 |
/etc/rc3.d ディレクトリ内のスクリプトを実行して以下の作業を行う。 |
|
表 6-9 /sbin/rc5 スクリプトと /sbin/rc6 スクリプト
|
スクリプト名 |
説明 |
|---|---|
|
/sbin/rc5 および /sbin/rc6 |
/etc/rc0.d/k* ディレクトリ内のスクリプトを実行して以下の作業を行う。 |
|
|
表 6-10 /sbin/rcS スクリプト