Linuxサービスの起動と停止の順序の操作
This document (7002295) is provided subject to the disclaimer at the end of this document.
環境
Novell SUSE Linux
Novell SUSE Linux Enterprise Server 9
Novell SUSE Linux Enterprise Server 10
Novell SUSE Linux Enterprise Desktop 10
問題の状況
- 場合によっては、サービスの起動と停止の順序を操作する必要があります。
- カスタムサービスへの起動と停止の順序の追加方法
解決策
LSB(Linux Standards Base)では、サービスの起動と停止の順序は「insserv」パッケージを使用して制御されます。Netware、DOSおよびその他のオペレーティングシステムと同様、SUSEは依存関係に基づいて起動と停止の順序を計算します。Linuxの特異性として、高速な起動時間の利用がありますが、仕組みは複雑になっています。
起動と停止のスクリプトは/etc/init.dにあります。スクリプトのヘッダは、次のようになります。
### BEGIN INIT INFO
# Provides: myService
# Required-Start: $network
# Should-Start:
# Required-Stop:
# Should-Stop:
# Default-Start: 2 3 5
# Default-Stop:
# Description: Example Service
### END INIT INFO
スクリプトに上記の情報がない場合(カスタムスクリプトなど)は、追加できます。すべてのLSB準拠のスクリプトには、同様のヘッダがあります。このヘッダがないファイルは、.depend.*およびboot.local、およびafter.localのファイルのみです。
insserveパッケージは上記のコメントを使用して、サービスが必要とするものを定義します。"Provides:"行は、"Required-Start"、"Should-Start"、"Required-Stop"、"Should-Stop"フィールドでその他のスクリプトが参照できる擬似名です。
特定のサービスを操作する方法があります。
- サービス名の前の"$"は、擬似名からなるサービスのグループを指します。これは/etc/insserv.confで定義されています。
- "$ALL"はサービスを最後に実行させる予約名です。
- "+"は、サービスがオプションであるか、サービスの失敗によって参照先のサービスの起動または停止が妨げられないことを意味します。
警告
.depend.*ファイルを直接変更しないでください(/etc/init.d内)。直接変更すると、システムが起動できなくなります。
/etc/init.d/rc?.dで、ディレクトリには起動と停止の順序があります。ファイル名の最初の文字と後続の2つの数字は、起動と停止の順序を定義します。たとえば、S05myServiceとS05myService2は同時に起動されます。S05myServiceとS06myService2はmyService2より前に起動されます。これらのファイルの番号を直接操作することがありますが、推奨されません。"chkconfig"または"insserv"を実行すると常にこれらのファイルの名前が変更されます。このほうがLSB方法より優れた方法です。
例
/etc/init.dで定義されたサービスヘッダを操作する例を示します。
次の例は、サービス"myService"をネットワークがロードされた後に起動し、サービス"myOtherService"を自動的に起動します。
### BEGIN INIT INFO
# Provides: myService
# Required-Start: $network
# Should-Start: myOtherService
# Required-Stop:
# Should-Stop:
# Default-Start: 2 3 5
# Default-Stop:
# Description: Example Service
### END INIT INFO
次の例は、サービス"myService"を最後に起動します。
### BEGIN INIT INFO
# Provides: myService
# Required-Start: $ALL
# Should-Start:
# Required-Stop:
# Should-Stop:
# Default-Start: 2 3 5
# Default-Stop:
# Description: Example Service
### END INIT INFO
次の例では、サービス"myService"をネットワークとオプションのコンポーネント"myOtherService"の後に起動します。
### BEGIN INIT INFO
# Provides: myService
# Required-Start: $network +myOtherService
# Should-Start:
# Required-Stop:
# Should-Stop:
# Default-Start: 2 3 5
# Default-Stop:
# Description: Example Service
### END INIT INFO
擬似サービスの定義
/etc/insserv.confで、サービススクリプトで"$"で参照される疑似サービスが定義されます。サービススクリプトのコレクションを追加して1度だけ参照する必要がある場合は、insserv.confファイルに追加できます。特定の環境へのカスタマイズに便利です。
たとえば、ファイアウォールルールスクリプトをネットワークが起動するたびに実行する場合は、/etc/insserv.confを変更して$networkが"network"と"myFirewall"を参照するようにします。/etc/init.dに有効なスクリプトが0755の権限で存在すると仮定すると、これを次のように変更できます。
ファイルには、<interactive>という特殊なキーワードが1つあります。<interactive>があるサービス名には、ユーザ操作が必要です。
サービスを連続して実行する
起動プロセスを高速化するため、サービスの起動と停止を並列化できます。多くの場合、この動作を変更する理由はありません。ただし、これに問題がある場合、/etc/sysconfig/bootを変更します。パラメータRUN_PARALLEL="YES"を見つけて"NO"に変更します。
変更を反映する
スクリプトを変更した後、2つのコマンドを実行する必要があります。"myService"を変更したファイル名に置換します。
- insserv myService
- chkconfig myService on
Novellおよびサードパーティ提供のサービスの変更
Novellまたはサードパーティから提供されたスクリプトを変更すると、変更内容はサービスパックアップグレードまたはサービスの新バージョンで上書きされる可能性が最も高くなります。一般に、Novellでは/etc/init.dスクリプトの新バージョンをリリースしていませんが、場合によってはリリースします。
カスタムスクリプトの追加
カスタムスクリプトの場合、ファイル許可は0755 (-rwxr-xr-x)である必要があります。
追加情報
Disclaimer
この情報は、米国Novell, Inc.およびノベル株式会社の内外から発生したものです。本文書の内容または本文書を使用した結果について、いかなる保証、表明または約束も行っていません。また、本文書の商品性、および特定目的への適合性について、いかなる黙示の保証も否認し、排除します。
本文書に記載されている会社名、製品名はそれぞれ各社の商品、商標または登録商標です。
- ドキュメントID: 7002295
- 作成年月日: 06-JAN-2009
- 修正年月日:
- ドキュメントリビジョン:
- 分類:
- 対象NOVELL製品およびバージョン: SUSE Linux Enterprise Desktop, SUSE Linux Enterprise Real Time, SUSE Linux Enterprise Server
- カテゴリ: