サーバーを起動するスクリプトを作成しました(最初の質問)。ここで、システムブート時に実行して、定義されたサーバーを起動します。これを行うにはどうすればよいですか?
私の調査結果によると、このファイルは/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
/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
/etc/rc.d/rcN.d/
にファイルを作成する必要はありません---すべきではありません---あなたが代わりにすべきことは、あなたのinitスクリプトの読みにコメントを入れることです
# chkconfig NNN A B
ここで、NNN
は、スクリプトをアクティブにするランレベルのセットです(例:ランレベル345
、3
、および4
でアクティブな場合は5
)、およびA
とB
は、開始および停止の優先順位です。次に、chkconfig --add foo
(スクリプトの名前がfoo
であると仮定)は、/etc/rc.d/rcN.d/
に適切な名前でファイルを作成します。
次に、service foo bar
を使用してbar
メッセージをスクリプトに送信できます(例:start
、stop
、つまり、$1
の送信元です)。