[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[debian-users:27559] Re: 起動スクリプトの変更
佐野@浜松です。
In <4.3.2-J.20010321122602.00bffaf0@xxxxxxxxxxxxxxxxxxxxxxxxxx>,
on "Wed, 21 Mar 2001 12:39:44 +0900',
with "Re: 起動スクリプトの変更",
Seiji Kaneko <se-kane@xxxxxxxxxxxxxxxxx> さん wrote:
> アップデート時に何が起こるかはローカルの管理者では管理できない。
>
> ∵) rc*.d へのシンボリックリンクは「設定」扱いではないから。
これはそうですね。 update-rc.d で設定するにしろ、コマンドラインで
mv するにしろ、パッケージをアップグレードする際に postinst などで
update-rc.d を使って再設定されてしまえば元に戻ってしまいます。
> で,最初に戻ると,ランレベル毎にローカルで動かすデーモンを細かく
> 弄りたい, という要求にうまい解があるか, というと「ない」が答え
> なんじゃないでしょうか。現実に x 関連を除くと, ランレベルを
> 実行時に細かく切り変えている管理者はほとんど居ないので, あまり
> 問題になっていないのかもしれません。
ひとつの解としては/etc/init.d/ 以下の起動スクリプト (これは設定
ファイル扱いなのでアップグレード時にファイルを入れ換えるかどうか
聞いてくる) を編集する方法がありますね。
で、かねこさんの書かれた方法はこれなんですが、そのまま exit 0
してしまうとどのランレベルでも使えません。
ところで /etc/init.d/ 以下にあるデーモン起動用スクリプトでは
case "$1" in
start)
(略)
;;
restart)
(略)
;;
reload)
(略)
;;
force-reload)
(略)
;;
stop)
(略)
;;
*)
echo "Usage: /etc/init.d/[package] {start|stop|restart|reload|force-reload}"
exit 1
;;
esac
といった部分があるはずですが、このうちの start) から ;; までの部分が
システム起動時に実行される処理です。
なので、start) 直後の部分に、例えば
# for runlevel 2 or 3, not start [...]
if [ "$RUNLEVEL" -eq 2 ]; then echo "[...] stopped at level 2"; exit 0; fi
if [ "$RUNLEVEL" -eq 3 ]; then echo "[...] stopped at level 3"; exit 0; fi
といった行を挿入しておけば、 runlevel 2 および 3 では
このデーモンを init によって自動起動させることがないように
できます。
ただ、この方法だとコマンドラインから /etc/init.d/<package> start
した場合には、自分で環境変数 RUNLEVEL を設定しておかないとそのまま
起動することになります。「そのほうがいい」のであれば良いのですが、
「それでは困る」という場合はもうちょっと違う記述をしないといけません。
もしも特定のランレベルでのみ起動させたいということであれば
例えば
if [ "$RUNLEVEL" -ne 4 ]; then echo "[...] stopped not at level 4"; exit 0; fi
としておけば、環境変数 RUNLEVEL が 4 である場合のみ起動される
ことになります。
また、この場合はコマンドラインから /etc/init.d/<package> start しても
環境変数 RUNLEVEL 4 が設定されていなければ途中で止まります。
なお、環境変数 RUNLEVEL の説明は man 8 init にあります。
環境変数
initは子プロセスのために以下のような環境変数を設定する:
PATH /usr/local/sbin:/sbin:/bin:/usr/sbin:/usr/bin
INIT_VERSION
名前の通り。あるスクリプトがinitにより直接実行さ れ
たのかどうかを見分ける際に有用。
RUNLEVEL
システムの現在のランレベル。
PREVLEVEL
直前のランレベル(ランレベルを変更した際に有用)。
--
# (わたしのおうちは浜松市、「夜のお菓子」で有名さ。)
<kgh12351@xxxxxxxxxxx> : Taketoshi Sano (佐野 武俊)