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


83

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

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


それはOSに依存します。どのUNIXバリアントを実行していますか?Linuxの場合、どのディストリビューションですか?どちらの中で/etc/init/etc/init.d/etc/rc.d/etc/rc.localといくつかのより多くのそれはありますか?
ジル

1
私はCentOSかそれに似たものを使用していると思います。Debianで答えは異なりますか?Debianのソリューションにも興味があります。
ナフトゥリケイ

回答:


109

前述のように、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ます。ckconfigmanページには、スクリプトのヘッダについて説明します。

 > 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
    

3
Chkconfigはあなたが欲しいものです。+1
whoami

initがランレベル2、3、4、5で何かを開始するのはなぜですか?ランレベル2でサーバーを起動しないように注意する必要はありませんか?とにかくランレベル4はRHELで定義されていないので、なぜそのランレベルで起動しようとするのでしょうか?批判ではなく、ただ知りたい。私はネイティブのSlackwareユーザーです。
ブルースエディガー

4はRHELでは定義されていませんが、存在します。あなたはあなた自身のもののためにそれを盗むことができます。
ケビンM

ヘッダーはchkconfigのマニュアルページから取得されます。私は個人的に235に固執し、ほとんどの場合は35に固執します。
-canen

起動中に何かが失敗した場合に確認できるログはありますか?
ウトカルシュシンハ

10

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

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に依存している場合は、デスクトップ環境の自動起動オプション、または/etc/X11/Xsession.d/説明したようなパターンを探します上記。

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


シンボリックリンクを作成するコマンドはありませんか?そのようなことを思い出したと思いました。
ナフトゥリケイ

1
じゃなかったupdate-rc.d
ナフトゥリケイ

GUIまたはコマンドライン?DEは、スクリプトを開始または停止するランレベルをマークするツールを提供する場合があります。私はそのようなものを見てきましたが、名前、および番号(xy)の指定方法を覚えていません。
ユーザー不明

コマンドライン。シンボリックリンクを処理し、特定のスクリプトを実行するかどうかに関係なくスイッチを切り替えることができます。
ナフトゥリケイ

3

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

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.