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 スクリプトを実行して次の作業を行います。
システムサービスとデーモンの終了
実行中のすべてのユーザープロセスの停止
すべてのリモートファイルシステムのマウント解除
以前の実行レベルが S であった場合、すべてのローカルファイルシステムのマウント
/sbin/rc2 スクリプトは、/etc/rc2.d スクリプトを実行して、機能別にグループ化された次の作業を行います。
ローカルシステム関連の作業
以前の実行レベルが S であった場合、すべてのローカルファイルシステムのマウント
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、/tmp、/var、/var/adm、および /var/run ファイルシステムのチェックとマウント
システム名の設定
擬似ファイルシステム (/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 341 343 347 345 # pgrep -f nfs -d, | xargs ps -fp UID PID PPID C STIME TTY TIME CMD daemon 341 1 0 Aug 21 ? 0:00 /usr/lib/nfs/statd root 343 1 0 Aug 21 ? 0:00 /usr/lib/nfs/lockd root 347 1 0 Aug 21 ? 0:41 /usr/lib/nfs/nfsd root 345 1 0 Aug 21 ? 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 |