| inittabオプションを知ろう |
「id」フィールドは,そのエントリを識別するための1文字,ないしは2文字のユニークな文字列を指定する。「rstate」では,そのエントリを実行するrun levelを指定する。例えば,そのエントリをrun level「2,3,4,5」で実行する場合,「2345」と記述する。「s」という文字列がついている場合,シングルユーザーモードの場合に実行される。
「action」は,そのエントリの挙動を指定するもので,ここで指定されているものの内容は以下の通りである。
|
「process」フィールドは,そのエントリで実行されるプロセスを指定する。これらを総合すると,Solarisの起動時には,まずinitが起動され,
ap::sysinit:/sbin/autopush -f /etc/iu.ap
ap::sysinit:/sbin/soconfig -f /etc/sock2path
fs::sysinit:/sbin/rcS sysinit
>/dev/msglog 2<>/dev/msglog </dev/console
|
が実行される。次の行が読み取られ結果としてrunlevel 3に移行する。
is:3:initdefault: |
さらに,次の行が読みとられ,必要なアプリケーションの起動などが行われる。
s2:23:wait:/sbin/rc2
>/dev/msglog 2<>/dev/msglog </dev/console
s3:3:wait:/sbin/rc3
>/dev/msglog 2<>/dev/msglog </dev/console
|
最後には,次の行が読み込まれて完了する。
c:234:respawn:/usr/lib/saf/sac -t 300 co:234:respawn: /usr/lib/saf/ttymon -g -h -p "`uname -n` console login: " -T sun-color -d /dev/console -l console -m ldterm,ttcompat |
スクリプトファイルの中を見てみよう。rcスクリプトの仕組みは次のようになっている。
Solaris では起動時の初期化やサーバアプリケーションの起動などは,/etc/rc2.d,/etc/rc3.dの中にあるスクリプトで行われる。initによって実行される/sbin/rc2,/sbin/rc3は,それぞれ/etc/rc2.dや,/etc/rc3.d の中のスクリプトを実行するのだ。
ここでは,実際に起動時の run level において,どのような処理が行われているのかを順を追って見ていき,その後で独自のプログラムの起動などを追加したい場合の方法を解説する。inittabによると,起動時のrun levelは「3」となっており,run levelが3の場合に実行される処理は次の2つである。
s2:23:wait:/sbin/rc2 >/dev/msglog 2<>/dev/msglog </dev/console s3:3:wait:/sbin/rc3 >/dev/msglog 2<>/dev/msglog </dev/console |
/sbin/rc2 は,/etc/rc2.d の中のスクリプトを実行する。rc2.dディレクトリの中を確認すれば,実行されるサービスが確認できる。
% ls /etc/rc2.d/ |
| 5/8 |
