起動時にシェルスクリプトを実行する方法


13

サーバーを起動するスクリプトを作成しました(最初の質問)。今、私はそれをシステムの起動時に実行し、定義されたサーバーを起動したい。これを完了するにはどうすればよいですか?

私の調査結果は、このファイルをその/etc/init.d場所に置き、システムが起動するときに実行されることを示しています。しかし、私はスタートアップの最初の議論がどのようになるのか理解できませんstartか?これはどこかで使用するために事前定義さstartれてい$1ますか?startallスクリプト内のすべてのサーバーを起動するケースが必要な場合、管理できるオプションは何ですか?

私のスクリプトは次のようなものです。

#!/bin/bash

case "$1" in
start)
     start
    ;;
stop)
    stop
    ;;

restart)
    $0 stop
    $0 start
    ;;
*)
    echo "usage: $0 (start|stop|restart)"
;;
esac

私はこれが古いことを知っています...しかし、シェルは「#!/ bin / bash」ではなく「#!/ bin / sh」である必要があります(例は/ usr / libに装着することができない)
リッチHomolka

回答:


19

/etc/init.dは、実行可能スクリプトが表示されるスクリプトディレクトリです。ただし、システムの起動後に特定の順序でスクリプトを実行するには、/etc/rc#.dディレクトリにファイルを追加する必要があります。ここに表示されるエントリは、実行するスクリプトの実行順序と実行レベルをシステムに指示します/etc/init.d。このチャートに従って、rcの後の数字は、マシンが実行されている実行レベルを示します。

http://en.wikipedia.org/wiki/Runlevel

あなたが持っている場合:

/etc/init.d/importantscript

次に、(空の)ファイルが必要です:

/etc/rc.d/rc3.d/S20importantscript
/etc/rc.d/rc6.d/K20importantscript

Sは開始を意味し、Kはキルを意味します。マシンが起動すると、システムは「ああ、RunLevel 3で実行しています。rc3.dにポップして、「/ etc / init.d」内のどのスクリプトをどの順序で実行する必要があるかを確認します。」この場合、システムは「S」でソートし、次に「S」の後の番号でソートし、「/ etc / init.d / importantscript start」を実行します。20は単に注文するためのものです。スクリプトは 'S19'の後ろと 'S21'の前で実行されます。以下を実行するだけで、これらのファイルを作成できます。

sudo touch /etc/rc.d/rc3.d/S20importantscript

素敵な要約もここにあります:http : //www.linux.com/news/enterprise/systems-management/8116-an-introduction-to-services-runlevels-and-rcd-scripts


「ln -s /etc/init.d/script」からrcX.d / *への方が一般的ではありませんか?
オズマ

8

あなたがする必要はありません---とするべきではありません---でファイルを作成します/etc/rc.d/rcN.d/; 代わりにすべきことは、initスクリプトの読み取りにコメントを入れることです

# chkconfig NNN A B

どこNNNスクリプトがアクティブ先のランレベルのセットがある(例えば、345それがランレベルでアクティブだ場合34、および5)、およびAおよびB開始と停止の優先順位です。次にchkconfig --add foo(スクリプトに名前が付けられていると仮定してfoo/etc/rc.d/rcN.d/適切な名前でファイルを作成します。

その後、使用することができますservice foo bar送信するためにbar(例えば、スクリプトへのメッセージをstartstop-あなたはどこそれは何でも、$1から来ています)。


0

$ 1は、スクリプトに渡されるコマンドライン引数であり、開始、停止、または再起動のいずれかです。openSUSE、私はランレベルエディタのブツをuseing時にスクリプトに他の引数を渡すためのオプションを持って覚えていないので、私はこれらはおそらくあなたが使用する必要がある唯一のものだと思います。

私は自分でCentOSを使用していませんが、どのランレベルで何が開始されるかを制御するプログラムはntsysvのようです。

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