web-dev-qa-db-ja.com

/etc/init.dのスクリプトを起動時に開始するにはどうすればよいですか?

これについてはしばらく読んだと思いますが、それがどのように行われたのか思い出せません。基本的に、/etc/init.dには起動時に自動的に開始するサービスがあります。スクリプトを/etc/rc.dディレクトリにシンボリックリンクすることと関係があることを覚えていますが、現時点では思い出せません。このためのコマンドは何ですか?

私はFedora/CentOS派生物を使用していると思います。

87
Naftuli Kay

すでに述べたように、Red Hatベースのシステムを使用している場合は、以下を実行できます。

  1. スクリプトを作成し、/etc/init.dに配置します(例:/etc/init.d/myscript)。スクリプトの形式は次のとおりです。
#!/bin/bash
# chkconfig: 2345 20 80
# description: Description comes here....

# Source function library.
. /etc/init.d/functions

start() {
    # code to start app comes here 
    # example: daemon program_name &
}

stop() {
    # code to stop app comes here 
    # example: killproc program_name
}

case "$1" in 
    start)
       start
       ;;
    stop)
       stop
       ;;
    restart)
       stop
       start
       ;;
    status)
       # code to check status of app comes here 
       # example: status program_name
       ;;
    *)
       echo "Usage: $0 {start|stop|status|restart}"
esac

exit 0 

形式はかなり標準的で、/etc/init.dで既存のスクリプトを表示できます。次に、/etc/init.d/myscript startまたはchkconfig myscript startのようなスクリプトを使用できます。 ckconfigのmanページでは、スクリプトのヘッダーについて説明しています。

 > This says that the script should be started in levels 2,  3,  4, and
 > 5, that its start priority should be 20, and that its stop priority
 > should be 80.

開始、停止、ステータスコードの例では、/etc/init.d/functionsで定義されたヘルパー関数を使用しています

  1. スクリプトを有効にする

    $ chkconfig --add myscript 
    $ chkconfig --level 2345 myscript on 
    
  2. スクリプトが実際に有効になっていることを確認します。選択したレベルが「オン」になっているはずです。

    $ chkconfig --list | grep myscript
    
115
canen

マシンが通常どのランレベルで開始するかをテストします。

runlevel

多くの場合、これは5または2です。さまざまな規則がありますが、実際に確立されたものはありません。 Ubuntuは2を使用していますが、以前使用していた以前のディストリビューションは常に使用していました

  • 1シングルユーザー(スーパーユーザー)
  • 2マルチユーザー
  • 3マルチユーザー+ネットワーク
  • 4未使用/ユーザー定義可能
  • 5マルチユーザー、ネットワーク+ X11

次に、initスクリプトからシンボリックリンクを作成します。多分/etc/init.d/foobarから/etc/rc2.d/SXYfoobar

Sは、このスクリプトをこのランレベルで開始することを意味します(ここでは2)。 XYは2桁の10進数で、シーケンスに関連しており、スクリプトが開始されます。

スクリプトS45barfooの実行に依存していて、S55foofooがスクリプトに依存している場合は、45から55までのxyを選択します。等しい数の場合、ブート順序は定義されていません。

一方、Ubuntuはupstartと呼ばれる別の起動手順に切り替えました(切り替えています)。

注:リンクは常に/etc/rcX.dにリンクしているわけではありません-/etc/init/rcX.dまたは同様のリンクである場合もありますが、/ etcの下のどこかで見つけやすいはずです。

開始スクリプトの最後に何かを開始したい場合は、/etc/rc.localが検索対象のファイルになりますが、既に実行中のX11に依存している場合は、デスクトップ環境のautostart-optionまたは/etc/X11/Xsession.d/上記と同様のパターン。

稼働しているネットワークに依存している場合は、別のディレクトリ(if-up.d)があり、外部USBドライブ/etc/udev/rules.d/などのマウントされたデバイス用です。

10
user unknown

Naftuli Tzvi Kayが上記のDebianについて尋ねたように、Debian 6以降、スクリプトには依存関係と機能を示すLSB(Linux Standards Base)ヘッダーを含める必要があります( debian wikiページを参照 )。

LSBヘッダーが存在する場合、insservを使用して起動プロセスにスクリプトを含めることができます( 別のdebian wikiページを参照 )。

3
mdt