デーモン(サービス)の起動と停止、初期化処理とランレベル
デーモンというのはwindowsでいうサービスのことで、いつも
起動してて裏で仕事をしてるプログラムです。
1.GUIによる管理
デスク
トップー>システム管理ー>サービスの管理をひく。
root権限が必要です。
起動中のサービスの一覧がでる。
プリンターがつながってないので印刷サービスのチェックを
はずしておくと良いでしょう。
2.ターミナルによる方法
ターミナルか
らは、デーモンの起動停止をもっと詳しく設定できます。
デーモンの起動停止は起動スクリプトで実施されます。起
動スクリプトの管理は起動処理(init)によって処理されてます。
Linux等SysV系UNIXには、稼動状態を指定するランレ
ベルというものがあります(BSD系UNIXはない)。
Linuxには0から6の7つのランレベルがあります。
2-1
起動スクリプトの場所
/etc/inittabをみると以下のような記述があります。
(途中省略)
#
The default runlevel.
id:2:initdefault:
(途中省略)
#
/etc/init.d executes the S and K scripts upon change
# of
runlevel.
#
# Runlevel 0 is halt.
# Runlevel
1 is single-user.
# Runlevels 2-5 are multi-user.
#
Runlevel 6 is reboot.
l0:0:wait:/etc/init.d/rc 0
l1:1:wait:/etc/init.d/rc
1
l2:2:wait:/etc/init.d/rc 2
l3:3:wait:/etc/init.d/rc
3
l4:4:wait:/etc/init.d/rc 4
l5:5:wait:/etc/init.d/rc
5
l6:6:wait:/etc/init.d/rc 6
(途中省略)
た
とえば
ランレベル1だと/etc/init.d/rcというスクリプトが引数 1 で起動されることがわかります。
rc
が引数 1で起動されると /etc/rc1.dの中の初期化スクリプトが順番に起動されます。
ランレベルの割
り当ては Debianだと以下のようになっています。
init0 = 停止
init1 =
シングルユーザーモード
init2 = マルチユーザーモード
init3 = init2に同じ
init4 = init2に同じ
init5 = init2に同じ
init6 = 再起動
一
方、/etc/inittab
の記述からデフォルトのランレベルが2のマルチユーザーモードであることがわかります。
通常使用してるのはマル
チユーザーモードなので/etc/rc2.dの内容をのぞいてみましょう。
#ls /etc/rc2.d
K80cupsys
S20acpid
S20inetd
S89cron
S99stop-bootlogd
K80lpd
S20canna
S20makedev
S99gdm
S99xdm
README
S20dbus
S20ssh
S99kdm
S10sysklogd
S20exim4
S21nfs-common S99local
S11klogd
S20hotkey-setup
S89atd
S99rmnologin
Kxx, Sxxという記号のついた初期化スクリプトがならんでいます。
K
ではじまるものはスクリプトの引数にstopをつけてスクリプトが実行されます。その結果デーモンが停止します。
Sではじまるものは
スクリプトの引数にstartをつけてスクリプトが実行されます。その結果デーモンが起動します。
xxの数字は呼び出す順番を決める
ためのもので若い番号から起動されます。
たとえ
ばcannaの起動スクリプトはrc1でもrc2でも同じものが使えるはずです。
そこで /etc/init.d
に本当の起動スクリプトをおいておき /etc/rc2.dには本当の起動スクリプトのシンボリックリンクが置いてあります。
シンボ
リックリンクというのはwindowsでいうショートカットのことです。
/etc/rc2.d/S20canna
の本当の起動スクリプトの場所を表示させてみましょう。
#ls -l /etc/rc2.d/S20canna
lrwxrwxrwx
1 root root 15 2006-08-08 20:15 /etc/rc2.d/S20canna ->
../init.d/canna
/etc/init.d/cannaが実体だということがわかります。
2-2
デーモンの起動と停止
デーモンの一時的な起動と停止には、/etc/init.d 内部の起動スクリプトを使います。
例
えば sshd を一時的に停止させるには
#/etc/init.d/ssh stop
一時的に起動させるには
#/etc/init.d/ssh
start
とやります。
現在のランレベルを知るには、
/sbin/runlevel
を使います
$
/sbin/runlevel
N
2
(Nは一つ前のランレベルが存在しないことを表しています)
ランレベルの変更には
telinit "ランレベル"を使います。
バックアップ作業などの為、シングルユーザーモード(ランレベル1)に移行するには
#telinit
1
とやります。
2-3 rc*.dディレクトリの管理
シンボリックリ
ンクを作成・削除するのに便利なコマンドにupdate-rc.dがあります。
(1)シンボリックリンクの作成
inetd
関係のシンボリックリンクを全て削除するに
は以下のコマンドを打ちます。
#update-rc.d -f inetd remove
シンボリックリンクが
全くないとinitdをアップデートしたときに再度作成されてしまうので適当にシンボリックリンクをつくります。
#update-rc.d
inetd stop 20 5 .
元に戻すには
#update-rc.d -f inetd remove
#dpkg-reconfigure netkit-inetd
ですね。
(2)シンボリックリンクの削除
参考HPによると
PostgreSQLの起動スクリプトのリンクを張るには
update-rc.d postgres start 90 2 3 4 5 . stop
10 0 1 6 .
とかやるといいそうです。
#man update-rc.d
で使い方
を調べてみるといいでしょう
2-4 localによるずさんな管理(Linux的には好ましくない)
/etc/init.d/local
という実行可能スクリプトを作って適当にコマンドを書いて、シンボリックリンクを作ると便利です。
#vi
/etc/init.d/local
(localの内容)
#!/bin/sh
mount
-a
(ここまで)
#chmod +x /etc/init.d/local
#update-rc.d
local defaults 99
<参
考HP>
Linux
な生活 起動処理(init)とランレベル(rc.d)の制御
Linux
起動の仕組みを理解しよう[init/inittab編]
このHPの内容に問題等ありましたら sけい
し(skeishi@yahoo.co.jp)まで連絡願います。
戻る
sけいし発HPに戻る