insserv コマンドは、Linux システム上のサービスの開始と停止の順序を制御するために使用されます。
init スクリプトのコメント ヘッダーを読み取り、すべてのスクリプト間の依存関係を計算することで、インストールされたシステムの init スクリプト (ブート スクリプト) を有効にします。
Insserv は、構成ファイル /etc/insserv.conf およびディレクトリ /etc/insserv.conf.d 内のシステム機能をスキャンします。
1. init.d スクリプト ヘッダーの形式
/etc/init.d ディレクトリの下のすべてのスクリプトには、次のようなヘッダーが必要です。各スクリプトのヘッダー セクションで行が (以下のように) コメント アウトされている場合でも、insserv はこれらすべての行を読み取ることができ、それに応じてすべての init スクリプトを有効にする必要があります。
次の例では、「# Required-Start:$local_fs boot.localnet」で始まる行により、insserv が $local_fs スクリプトと boot.localnet スクリプトを実行/検証してから、boot.kdump スクリプトを実行できるようになります。
同様に、「# Required-Stop:$local_fs boot.localnet」行により、insserv はこのスクリプトが実行される前にサービスを停止できます。
init スクリプトを初めて使用する場合は、LSB Init Standard に基づいてカスタム init スクリプトを作成する方法を理解する必要があります。
# cat boot.kdump #!/bin/bash # # Copyright 2005 Red Hat, Inc. # Author: Jeff Moyer <[email protected]> ### BEGIN INIT INFO # Provides: boot.kdump # Required-Start: $local_fs boot.localnet # Should-Start: # Should-Stop: # Required-Stop: $local_fs boot.localnet # Default-Start: B # Default-Stop: # Short-Description: kdump boot configuration # Description: This script loads the kdump kernel on startup. ### END INIT INFO . /etc/sysconfig/kdump . /etc/rc.status
2. insserv.conf ファイル形式
以下は、insserv コマンドで使用される構成ファイルである /etc/insserv.conf の例です。
# cat /etc/insserv.conf # All local filesystems are mounted (done during boot phase) $local_fs boot.localfs +boot.crypto # Low level networking (ethernet card) $network network # Named is operational $named +named +dnsmasq +lwresd $network # All remote filesystems are mounted (note in some cases /usr may # be remote. Most applications that care will probably require # both $local_fs and $remote_fs) $remote_fs $local_fs +nfs +smbfs # System logger is operational $syslog syslog # SunRPC portmapper available $portmap portmap # The system time has been set correctly $time boot.clock +xntpd # Services which need to be interactive <interactive> apache apache2 boot.clock boot.crypto boot.crypto-early boot.localfs boot.rootfsck kbd kdump ntp
上記の構成ファイルで:
- $network は、スクリプト /etc/init.d/network を参照する疑似名です。
- 同様に、/etc/insserv.conf に各スクリプトの疑似名が表示されます。これらは、ブート スクリプトのヘッダー セクションで使用される疑似名です。
- $ とそれに続く名前で始まる各行は、Linux Standard Base Specification (LSB) に従ってシステム機能を定義します
- そのようなシステム機能が後に続くすべての名前は、機能の必要な依存関係を宣言します。
- プラス記号の後の名前のサービスが利用可能な場合は、それが使用されます。利用できない場合は、黙って無視されます。
- <で始まり> で終わる単語はキーワードです。
- 現在、
は、サービスをインタラクティブなものとしてマークするための唯一の既知のキーワードです。起動時またはランレベルの変更時にパスフレーズまたはパスワードの入力を必要とするサービス
3.サービスを追加
insserv ユーティリティを使用して簡単なサービスを追加する方法の例を次に示します。
まず、実行可能ファイルが /etc/init.d ディレクトリの下にあることを確認します。
# ls -l /etc/init.d/joystick -rwxr-xr-x 1 root root 2296 May 5 2010 /etc/init.d/joystick
次に、insserv コマンドを実行して、ジョイスティック サービスを有効にします。
# insserv joystick
上記の insserv コマンドの後に、chkconfig を実行して、スタートアップ リストに追加されていることを確認します。
# chkconfig --list | grep joystick joystick 0:off 1:off 2:on 3:on 4:off 5:on 6:off
上記は依存関係のない非常に単純な例であることに注意してください。しかし、insserv の威力は、すべての適切な依存スクリプトを自動的に解決して追加するところにあります。
4.テスト実行の実行
どのサービスも有効にせずに予行演習を実行するには、以下に示すように -n フラグを使用します。
# insserv –n insserv: Loading ypserv insserv: Loading /etc/insserv/overrides/ypserv insserv: Loading network insserv: Loading /etc/insserv/overrides/network insserv: Loading aaeventd insserv: Loading /etc/insserv/overrides/aaeventd insserv: Loading ntp insserv: Loading hawk insserv: Loading /etc/insserv/overrides/hawk insserv: Loading fetchmail insserv: Loading /etc/insserv/overrides/fetchmail insserv: Loading boot.cycle insserv: Loading /etc/insserv/overrides/boot.cycle insserv: Loading autoyast .. ..
5.サービスを削除
サービスを削除するには、以下に示すようにオプション -r を使用します。
# insserv -r joystick
サービスを削除すると、chkconfig の出力に表示されなくなります。
# chkconfig --list | grep joystick
6.デフォルトの実行レベルを使用
スクリプトで定義されたデフォルトの実行レベルを使用するには、-d オプションを使用します。ランレベル リンク スキームを編集した場合、これらの変更が復元される場合があります。
# insserv –d
スクリプトで定義されたデフォルトの実行レベルを使用するには、–d オプションを使用します。次の例では、insserv は、システムまたはユーザーによって定義された実行レベルからスクリプトを実行する代わりに、スクリプトで定義された実行レベルを使用します。
# insserv –d <script name> # insserv -d /etc/init.d/lighttpd # chkconfig --list | grep lighttpd lighttpd 0:off 1:off 2:off 3:on 4:off 5:on 6:off
7.サービスの強制実行
必要なサービスを無視して強制的に実行するには、以下に示すように -f オプションを使用します。
# insserv –f
システムが他の必要なサービスまたは依存スクリプトを無視するように強制するには、–f オプションを使用します。次の例では、/etc/init.d/openhpid スクリプトを実行するために、ネットワーク、リモート、syslog サービスなどの他の依存関係を最初に開始する必要があります。
# more /etc/init.d/openhpid #! /bin/sh # ### BEGIN INIT INFO # Provides: openhpid # Required-Start: $network $remote_fs $syslog # Required-Stop: $network $remote_fs $syslog # Should-Start: $named # Should-Stop: $named # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: Start OpenHPI daemon at boot time # Description: Enable OpenHPI service which is provided by openhpid. ### END INIT INFO
以下に示すように、insserv コマンドを使用して、ネットワーク、リモート、syslog サービスのステータスを無視して、システムに /etc/init.d/openhpid スクリプトを強制的に実行させることができます。
# insserv -f /etc/init.d/openhpid
また、上記の出力のいずれかと一緒に -v オプションを使用して、コマンドの実行内容の詳細を確認することもできます。
# insserv –dv
8.スクリプト ディレクトリの変更
前のすべての例からわかるように、スクリプトはデフォルトで /etc/init.d ディレクトリに配置されます。 insserv でスクリプトに別のディレクトリを使用する場合は、-p オプションを使用してください。
たとえば、以下はスクリプトの場所として /etc/init.d.custom ディレクトリを使用します。
# insserv –p /etc/init.d.cusom
9. Insserv カスタム構成ファイル
構成ファイルのパスを指定するには、-c オプションを使用します。これは、insserv.conf ファイルと insserv.conf.d ディレクトリの両方に使用されます。
# insserv –c <config file>
たとえば、構成ファイルに /etc/insserv.conf の代わりに別のパスを使用したい場合、次の例に示すようにコマンドを使用できます。
これは、/etc/insserv.conf ファイルに変更を加え、検証目的で予行演習 (-n) 手順を実行する場合に非常に役立ちます。元のファイルをバックアップし、必要な変更を加えてから、新しい場所を指定します。
すべてのテストが完了したら、同じコマンドを実行して元の構成ファイルに戻すか、新しい場所を使用できます。
# insserv -c /var/tmp/insserv_karthik.conf
10. Insserv オーバーライドと関連ファイル
パスを上書きして /etc/insserv/overrides を置き換えるには、次のオプションを使用してください。
デフォルトでは、デフォルトの /etc/insserv/overrides ディレクトリの下にある LSB コメント ヘッダーが、以下にあるスクリプトの LSB コメント ヘッダーを上書きします。 /etc/init.d ディレクトリ。
ただし、独自のオーバーライド ディレクトリを指定する場合は、-o オプションを使用します。以下は、/etc/insserv/my.overrides をオーバーライド ディレクトリとして定義します。
# insserv –o /etc/insserv/my.overrides
LSB コメント ヘッダーを新しいコメントでオーバーライドまたは置換するには、特定のパスに新しいヘッダーを含むファイルを作成し、元のスクリプトで定義されたコメントを探す代わりに新しいファイルを探すように insserv に指示します。
次の例では、/etc/init.d/splash は以下の LSB コメントを持つスクリプトです。これらのコメントは、どのサービスを最初に開始または停止する必要があるかを判断するために使用されます。
# more /etc/init.d/splash #! /bin/bash # Copyright (c) 1995-2000 SuSE GmbH Nuernberg, Germany. # # Author: Michael Schroeder <[email protected]> # # /etc/init.d/splash # /usr/sbin/rcsplash # # System startup script for console splash screens # ### BEGIN INIT INFO # Provides: splash # Required-Start: $remote_fs # Should-Start: fbset # Required-Stop: $remote_fs # Should-Stop: fbset # Default-Start: 1 2 3 5 S # Default-Stop: # Description: Splash screen setup ### END INIT INFO
上記の LSB コメントを使用したくない場合、また既存のスクリプトを変更したくない場合は、ファイルを /etc/insserv/overrides ディレクトリにコピーし、以下の insserv コマンドを実行して、定義されたスクリプトを使用するようにシステムに指示します。オーバーライド ディレクトリで、
insserv -o splash
デフォルトのパスは /etc/insserv/overrides であるため、オーバーライド ディレクトリの場所を指定する必要はありません。 insserv dry-run (-n) を実行して、スクリプトがどのように実行されるかを確認することもできます。
以下は、insserv コマンドによって処理されるさまざまなファイルです:
- /etc/insserv.conf – LSB システム機能を定義する insserv の構成ファイル
- /etc/insserv.conf.d/ – LSB システム機能を宣言するための詳細な構成ファイルのディレクトリ
- /etc/insserv/overrides/ – 既存の LSB コメント ヘッダーをこのパスにあるコメント ヘッダーに置き換えるパス。
- /etc/init.d/ – Linux Standard Base Specification (LSB) で要求される SuSE init スクリプト ベース ディレクトリへのパス