この章では、実行レベルとブートファイルに関する概要と手順について説明します。
この章で説明する手順は次のとおりです。
この章の内容は以下のとおりです。
システムの「実行レベル」 (「init 状態」ともいう) は、ユーザーが使用できるサービスとリソースを定義します。システムが 1 度に持つことのできる実行レベルは 1 つだけです。
Solaris 環境には 8 つの実行レベルがあります (表 11–1 参照)。デフォルトの実行レベル 3 は、/etc/inittab ファイルに指定されています。
表 11-1 Solaris 実行レベル
who -r コマンドを使用すると、実行レベルに関する情報が表示されます。
$ who -r |
who -r コマンドを使用して、システムの現在の実行レベルを調べます (ただし、実行レベル 0 を除く)。
次の例では、システムの現在の実行レベルと以前の実行レベルに関する情報を表示します。
$ who -r . run-level 31 Dec 13 10:102 33 04 S5 $ |
現在の実行レベル
実行レベルが最後に変更された日時
現在の実行レベル
最後にリブートしてからシステムがこの実行レベルになった回数
以前の実行レベル
init または shutdown コマンドを使用してシステムをブートしたり実行レベルを変更したりすると、init デーモンは、/etc/inittab ファイルから情報を読み取ってプロセスを起動します。/etc/inittab ファイルには、init プロセスにとって重要な 3 つの情報が定義されています。
システムのデフォルトの実行レベル
起動、監視するプロセス、および停止時に再起動するプロセス
システムが新しい実行レベルに移行したとき行う処理
/etc/inittab ファイル内の各エントリは、次のフィールドからなります。
id:rstate :action :process
表 11–2 に、inittab エントリの各フィールドの説明を示します。
表 11-2 inittab ファイルのフィールドの説明
フィールド |
説明 |
---|---|
id |
エントリに固有の (一意の) 識別子。 |
rstate |
このエントリが適用される実行レベルのリスト。 |
action |
プロセスフィールドに指定されたプロセスの実行方法。指定できる値は、initdefault、sysinit、boot、bootwait、wait、および respawn。 initdefault はデフォルトの実行レベル。他の action キーワードについては、inittab(4) を参照。 |
process |
実行するコマンドまたはスクリプトを定義する。 |
次の例では、Solaris リリースでインストールされるデフォルトの inittab ファイルを注釈付きで示します。
1 ap::sysinit:/sbin/autopush -f /etc/iu.ap 2 ap::sysinit:/sbin/soconfig -f /etc/sock2path 3 fs::sysinit:/sbin/rcS sysinit >/dev/msglog 2<>/dev/msglog </dev/console 4 is:3:initdefault: 5 p3:s1234:powerfail:/usr/sbin/shutdown -y -i5 -g0>/dev/msglog 2<>/dev/... 6 sS:s:wait:/sbin/rcS >/dev/msglog 2<>/dev/msglog </dev/console 7 s0:0:wait:/sbin/rc0 >/dev/msglog 2<>/dev/msglog </dev/console 8 s1:1:respawn:/sbin/rc1 >/dev/msglog 2<>/dev/msglog </dev/console 9 s2:23:wait:/sbin/rc2 >/dev/msglog 2<>/dev/msglog </dev/console 10 s3:3:wait:/sbin/rc3 >/dev/msglog 2<>/dev/msglog </dev/console 11 s5:5:wait:/sbin/rc5 >/dev/msglog 2<>/dev/msglog </dev/console 12 s6:6:wait:/sbin/rc6 >/dev/msglog 2<>/dev/msglog </dev/console 13 fw:0:wait:/sbin/uadmin 2 0 >/dev/msglog 2<>/dev/msglog </dev/console 14 of:5:wait:/sbin/uadmin 2 6 >/dev/msglog 2<>/dev/msglog </dev/console 15 rb:6:wait:/sbin/uadmin 2 1 >/dev/msglog 2<>/dev/msglog </dev/console 16 sc:234:respawn:/usr/lib/saf/sac -t 300 17 co:234:respawn:/usr/lib/saf/ttymon -g -h -p "`uname -n` console login: " -T terminal-type -d /dev/console -l console -m ldterm,ttcompat |
STREAMS モジュールを初期化します。
ソケット転送プロバイダを構成します。
ファイルシステムを初期化します。
デフォルトの実行レベルを定義します。
電源障害の場合のシャットダウンを指定します。
シングルユーザーレベルを定義します。
実行レベル 0 を定義します。
実行レベル 1 を定義します。
実行レベル 2 を定義します。
実行レベル 3 を定義します。
実行レベル 5 を定義します。
実行レベル 6 を定義します。
未使用レベル firmware を定義します。
未使用レベル off を定義します。
未使用レベル reboot を定義します。
サービスアクセスコントローラを初期化します。
コンソールを初期化し、端末のタイプを識別します。
init プロセスが起動されます。init プロセスは、/etc/default/init ファイルを読み取って環境変数を設定します。デフォルトでは、TIMEZONE 変数だけが設定されます。
init は inittab ファイルを読み取り、次の処理を行います。
デフォルトの実行レベル 3 を定義する initdefault エントリを識別します。
action フィールドが sysinit になっているすべてのプロセスエントリを実行して、ユーザーがログインする前に特別な初期設定処理がすべて行われるようにします。
rstate フィールドが 3 になっている (デフォルトの実行レベル 3 と一致する) プロセスエントリを実行します。
init プロセスが inittab ファイルを使用する方法の詳細は、init(1M) のマニュアルページを参照してください。
表 11–3 に、実行レベル 3 の action フィールドに使用するキーワードの説明を示します。
表 11-3 実行レベル 3 の action キーワードの説明
キーワード |
説明 |
---|---|
powerfail |
init プロセスが電源切断シグナルを受信したときにだけプロセスを起動する。 |
respawn |
プロセスを起動し、そのプロセスが終了したら再起動する。 |
wait |
プロセスを起動し、そのプロセスが終了するまで待ってから、この実行レベルの次のエントリに進む。 |
表 11–4 に、実行レベル 3 で実行されるプロセス (またはコマンド) の説明を示します。
表 11-4 実行レベル 3 のコマンドの説明
コマンドまたはスクリプト名 |
説明 |
---|---|
/usr/sbin/shutdown |
システムをシャットダウンする。init プロセスは、システムが電源切断シグナルを受信した場合にのみ shutdown コマンドを実行する。 |
/sbin/rcS |
ルート (/)、 /usr、 /var、 /var/adm のファイルシステムをマウントしてチェックする。 |
/sbin/rc2 |
標準のシステムプロセスを起動して、システムを実行レベル 2 (マルチユーザーレベル) に移行する。 |
/sbin/rc3 |
実行レベル 3 で使用される NFS リソース共有を開始する。 |
/usr/lib/saf/sac -t 30 |
ポートモニターを起動する。このプロセスは失敗すると再起動される。 |
/usr/lib/saf/ttymon -g -h -p "`uname -n` console login: " -T terminal_type -d /dev/console -l console |
コンソールでのログイン要求を監視する ttymon プロセスを起動する。このプロセスは失敗すると再起動される。 SPARC システムの terminal_type は sun である。 IA システムの 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 K03samba* S20sysetup* S72slpd* S88utmpd* K06mipagent* S21perf* S73cachefs.daemon* S89PRESERVE* K07dmi* S30sysid.net* S73nfs.client* S89bdconfig@ K07snmpdx* S40llc2* S74autofs* S90wbem* K16apache* S42ncakmod* S74syslog* S91afbinit* K21dhcp* S47pppd* S74xntpd* S91gfbinit* K26sshd* S69inet* S75cron* S91ifbinit* K27boot.server* S70sckm* S75flashprom* S92volmgt* K28kdc* S70uucp* S75savecore* S93cacheos.finish* K28kdc.master* S71ldap.client* S76nscd* S94ncalogd* K28nfs.server* S71rpc* S77sf880dr* S95IIim* README S71sysid.sys* S80lp* S95svm.sync* S01MOUNTFSYS* S72autoinstall* S80spc* S98efcode* S05RMTMPFILES* S72directory@ S85power* S99audit* S10lu* S72inetsvc* S88sendmail* S99dtlogin* |
/etc/rcn.d 内のスクリプトは常に、スクリプト名を ASCII 文字列としてソートした順に実行されます。スクリプト名の形式は次のとおりです。
[KS][0-9][0-9]*
名前が K で始まるスクリプトを実行すると、システムサービスが停止 (kill) します。名前が S で始まるスクリプトを実行すると、システムサービスが起動します。
実行制御スクリプトは、/etc/init.d ディレクトリにもあります。これらのファイルは、/etc/rcn.d ディレクトリ内の対応する実行制御スクリプトにリンクされています。
各実行制御スクリプトの処理については、次の節で要約します。
以降の節に、実行レベルを変更したときにシステムサービスを起動および停止するための実行制御スクリプトをまとめてあります。
/sbin/rc0 スクリプトは、/etc/rc0.d スクリプトを実行して次の作業を行います。
システムサービスとデーモンの終了
実行中の全プロセスの停止
全ファイルシステムのマウント解除
/sbin/rc1 スクリプトは、/etc/rc1.d スクリプトを実行して次の作業を行います。
システムサービスとデーモンの終了
実行中の全プロセスの停止
全ファイルシステムのマウント解除
システムをシングルユーザーレベルに移行
/sbin/rc2 スクリプトは、/etc/rc2.d スクリプトを実行して、機能別にグループ化された次の作業を行います。
ローカルシステム関連の作業
すべてのローカルファイルシステムをマウントする
quota オプションを指定してマウントされたファイルシステムが 1 つでも存在する場合は、ディスク割り当てを有効にする
エディタの一時ファイルを /usr/preserve ディレクトリに保存する
/tmp ディレクトリにあるすべてのファイルを削除する
設定されている場合、システムアクティビティデータの収集、システムアカウント、システム監査を起動する
システムロギングデーモン (syslogd) を起動し、デフォルトのダンプデバイスを設定し、/var/adm/messagesファイルをローテーションする
/etc/dispadmin.conf ファイルが存在する場合は、デフォルトのスケジューリングクラスを設定する
ローカルプリンタが設定され、印刷待ち行列がクリーンアップされている場合は、LP 印刷サービス (lpsched) を起動する
必要に応じて、電源管理を設定する
utmpd デーモンを起動する
cron および vold デーモンを起動する
シリアルデバイスストリームを設定する
WBEM サービスを設定する
必要に応じてボリュームを同期化し、mdmonitord デーモンを起動してボリュームの物理コンポーネントを監視する
必要に応じて、CDE デスクトップログインプロセス dtlogin を起動する
ネットワークサービスまたはセキュリティ関連の作業
必要に応じて、ネットワークインタフェースを構成し、 ifconfig ネットマスクを設定し、ネットワークルーティングを設定する
ネットワークサービス (inetd および rpcbind) デーモンを起動する
論理リンクコントローラ (llc2) が設定されている場合は起動する
システムがネームサービス用に設定されているかどうか、およびシステムがクライアントまたはサーバーのどちらであるかによって、ネームサービスのドメイン名を設定し、各種ネームサービスデーモンを起動する
必要に応じて、keyserv、statd、lockd、xntpd の各デーモンを起動する
すべての NFS エントリをマウントする
必要に応じて、Solaris NCA (Network Cache and Accelerator) および NCA ロギングを設定する
Solaris PPP サーバーまたはクライアントデーモン (pppoed またはpppd) が設定されている場合は起動する
LDAP キャッシュマネージャ (ldap_cachemgr) が設定されている場合は起動する
ディレクトリサーバー (slapd) デーモンが設定されている場合は起動する
DNS (in.named) デーモンが設定されている場合は起動する
サービスロケーションプロトコル (slpd) デーモンが設定されている場合は起動する
/etc/rctladm.conf および/etc/pooladm.conf ファイルが存在する場合は、システムリソース制御とシステムプールを設定する
必要に応じて、cachefsd、automount、sendmail の各デーモンを起動する
htt_server プロセスを起動する
インストール関連の作業
システム起動時またはシステム停止時の Live Upgrade ソフトウェアのブート環境を設定する
/etc/.UNCONFIGURE ファイルがあるかどうかをチェックして、システムを設定し直す必要があるかどうか調べる
/.PREINSTALL または /AUTOINSTALL のどちらかが存在する場合、インストールメディアまたブートサーバーからシステムをリブートする
ハードウェア関連の作業
必要に応じて、Sun Fire 15000 のキー管理デーモン (sckmd) を起動する
必要に応じて、Sun Fire 880 の動的再構成デーモン (sf880drd) を起動する
フラッシュ PROM の更新スクリプトを実行する
グラフィックフレームバッファまたはグラフィックアクセラレータを設定する
必要に応じて、FCode インタプリタデーモン (efdaemon) を実行する
実行レベルを変更したときは、次のサービスを移行します。
Apache (tomcat)
ブートサーバー (in.rarpd、rpc.bootparamd、または rpld)
DHCP (in.dhcpd)
Kerberos KDC (krb5kdc) および Kerberos 管理 (kadmind)
Mobile IP (mipagent)
NFS サーバー (nfsd、mountd、nfslogd)
Samba (smdb および nmdb)
ssh (secure shell) (sshd)
Solstice Enterprise Agents (dmispd および snmpXdmid)
実行レベル 2 で起動されるシステムサービスとアプリケーションの多くは、システム上にインストールされているソフトウェアによって決まります。
/sbin/rc3 スクリプトは、/etc/rc3.d スクリプトを実行して次の作業を行います。
Apache サーバーデーモン (tomcat) が設定されている場合は起動する
必要に応じて、DHCP デーモン (in.dhcpd) を起動する
Kerberos KDC (krb5kdc) および Kerberos 管理 (kadmind) デーモンが設定されている場合は起動する
Mobile IP デーモン (mipagent) が設定されている場合は起動する
Samba デーモン (smdb および nmdb) が設定されている場合は起動する
必要に応じて、ssh (secure shell) デーモン (sshd) を起動する
Solstice Enterprise Agents (dmispd および snmpXdmid) を起動する
/etc/dfs/sharetab ファイルをクリーンアップする
必要に応じて、NFS サーバーデーモン nfsd、mountd、および nfslogd を起動する
ブートサーバーの場合は、rarpd、rpc.bootparamd、rpld デーモンを起動する
/sbin/rc5 および /sbin/rc6 スクリプトは、/etc/rc0.d/K* スクリプトを実行して、次の作業を行います。
すべてのアクティブなプロセスを停止する
ファイルシステムのマウント解除
/sbin/rcS スクリプトは、/etc/rcS.d スクリプトを実行して、システムを実行レベル S に移行します。これらのスクリプトによって次の作業が行われます。
最小限のネットワークの確立
必要に応じて、/usr をマウントする
システム名の設定
ルート (/) および /usr ファイルシステムのチェック
擬似ファイルシステム (/proc と /dev/fd) のマウント
再構成用ブートのデバイスエントリの再構築
シングルユーザーレベルでマウントされる他のファイルシステムをチェックしてマウントする
実行レベルごとに対応するスクリプトを持つことの利点は、/etc/init.d ディレクトリ内の個々のスクリプトを実行することによって、システムの実行レベルを変更しないで (現在の実行レベルの) システムサービスを停止できる点です。
スーパーユーザーになります。
システムサービスを停止します。
# /etc/init.d/filename stop |
システムサービスを再開します。
# /etc/init.d/filename start |
サービスが停止または起動していることを確認します。
# 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 daemon 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 /etc/init.d/ /etc/rc2.d/ /etc/rcn.d/ |
次の例は、xyz サービスの実行制御スクリプトを追加する方法を示しています。
# cp xyz /etc/init.d # chmod 0744 /etc/init.d/xyz # chown root:sys /etc/init.d/xyz # 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 _* # _filename |
次の例は、S100datainit スクリプトの名前を変更する方法を示しています。
# cd /etc/rc2.d # mv S100datainit _S100datainit # ls _* # _S100datainit |