web-dev-qa-db-ja.com

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

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

私の調査結果によると、このファイルは/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
13
vijay.shad

/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

19
aronchick

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

# chkconfig NNN A B

ここで、NNNは、スクリプトをアクティブにするランレベルのセットです(例:ランレベル3453、および4でアクティブな場合は5)、およびABは、開始および停止の優先順位です。次に、chkconfig --add foo(スクリプトの名前がfooであると仮定)は、/etc/rc.d/rcN.d/に適切な名前でファイルを作成します。

次に、service foo barを使用してbarメッセージをスクリプトに送信できます(例:startstop、つまり、$1の送信元です)。

8
Peter

$ 1は、スクリプトに渡されるコマンドライン引数で、開始、停止、再起動のいずれかです。 openSUSE では、ランレベルエディターを使用するときにスクリプトに他の引数を渡すオプションがあることを覚えていません。

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

0
Neal