*nix系OSの起動時のデーモン(サービス)起動について
はじめに
デーモンとして起動するmongodbのオプションを追加/変更したかったのだけど、
*nix弱者で、*nix系OSの起動時の仕組みがよくわかっていないので、メモしておきます。
結論
textSearchEnabledを設定ファイルに書けって話ですね。
結論としては/etc/init/mongodb.confのstart-stop-daemonの--execの部分を変更すればいいってとこに落ち着いたけど、あってるかは不明。
# Text Searchを有効にするなら if [ "x$ENABLE_MONGODB" = "xyes" ]; then exec start-stop-daemon \ --start --quiet --chuid mongodb --exec /usr/bin/mongod -- \ --setParameter textSearchEnabled=true --config /etc/mongodb.conf; fi
init.d
起動時にOSがごにょごにょして/etc/init.dの下にあるスクリプトが実行されるようです。
スクリプトを見てみます。
ちなみにmongodbのスクリプトを見てみます。
... INITSCRIPT="$(basename "$0")" JOB="${INITSCRIPT%.sh}" ...
$(basename "$0")はコマンド置換ですね。
$0は位置パラメータという組み込み変数でスクリプト名に置換されます。
# INITSCRIPT="$(basename "$0")" は # INITSCRIPT="$(basename "/etc/init.d/mongodb")" になり # INITSCRIPT="mongodb" になる INITSCRIPT="$(basename "$0")"
${}はパターン照合演算子というやつで
${val#pattern}はvalの先頭からpatternに一致した最も短い部分を削除し、残りを返す
${val%pattern}はvalの末尾からpatternに一致した最も短い部分を削除し、残りを返す
# JOB="${INITSCRIPT%.sh}" は # 末尾に.shがあれば、それを削除して残りの部分を返す
起動の部分がみたいので、startの所を見てみる。
# $COMMAND には/etc/init.d/mongodb start でいうstartがはいり # $JOB にはmongodbが入る # start mongodb が実行される $COMMAND "$JOB"
startっていうコマンドがあるらしい。
man startをしてみるとinitctl(8)が表示された。
/sbin/startはinitctlへのシンボリックリンク
file `which start`
UpStart
これはUpStartっていうらしい
# /etc/init.d/mongodb はupstart-jobへのシンボリックリンク /etc/init.d/mongodb -> /lib/init/upstart-job
んで、UpStartの設定として、ジョブ定義というものがあるらしい
ubuntuの場合は/etc/init/mongodb.confになる
その中にscript 〜 script endと書くことでシェルスクリプトをそのまま書けるらしい
script ENABLE_MONGODB="yes" if [ -f /etc/default/mongodb ]; then . /etc/default/mongodb; fi if [ "x$ENABLE_MONGODB" = "xyes" ]; then exec start-stop-daemon \ --start --quiet --chuid mongodb --exec /usr/bin/mongod -- \ --config /etc/mongodb.conf; fi end script
ENABLE_MONGODB="yes"は意味がわからなかった。
/etc/defaultは追加設定を置いておく場所らしい。
その後、start-stop-daemonが実行される。これはプログラムを簡単にデーモン化するものらしい。