*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が実行される。これはプログラムを簡単にデーモン化するものらしい。