More Related Content Similar to initとプロセス再起動 (20) More from Takashi Takizawa More from Takashi Takizawa (20) initとプロセス再起動2. 2
私は誰
• 氏名: 滝澤 隆史 @ttkzw
• 所属: 株式会社ハートビーツ
• 何やっている人
▫ メーラMuttの国際化や日本語対応パッチ作者
▫ SpamAssassinの日本語対応パッチ作者
▫ Unbound/NSDの文書の翻訳
5. Linuxにおけるinit
• initはカーネルのブート後に最初に起動するプロセス
• 厳密に言うと、
▫ カーネルは起動時に、initrdとして指定されたinitramfs/initrd
イメージをルートパーティションとしてマウントする。
▫ /init(スクリプト)を実行する。
▫ /initスクリプト内でデバイスの認識やルートパーティショ
ンのマウントなどを行う。
▫ /initスクリプトの最後で、exec経由および、switch_rootあ
るいはrun-initコマンド経由で/sbin/initを実行する。
exec switch_root /sysroot /sbin/init
exec run-root /root /sbin/init
7. SysV init inittabの形式
ID:ランレベル:アクション:プロセス
• /sbin/initが起動
• /etc/inittabを読む。 /etc/inittab
id:3:initdefault:
• sysinitに定義したプロセスを実行
▫ rc.sysinitスクリプトを実行 si::sysinit:/etc/rc.d/rc.sysinit
• initdefaultに定義したランレベル l0:0:wait:/etc/rc.d/rc 0
に切り替え l1:1:wait:/etc/rc.d/rc 1
l2:2:wait:/etc/rc.d/rc 2
• ランレベル毎のwaitに定義したプ l3:3:wait:/etc/rc.d/rc 3
ロセスを実行。 l4:4:wait:/etc/rc.d/rc 4
l5:5:wait:/etc/rc.d/rc 5
▫ rcスクリプトを実行。 l6:6:wait:/etc/rc.d/rc 6
• respawnに定義したプロセスを実
1:2345:respawn:/sbin/mingetty tty1
行 2:2345:respawn:/sbin/mingetty tty2
▫ mingetty(端末)あるいは 3:2345:respawn:/sbin/mingetty tty3
4:2345:respawn:/sbin/mingetty tty4
prefdm( 5:2345:respawn:/sbin/mingetty tty5
ジャ)を起動。 x:5:respawn:/etc/X11/prefdm -nodaemon
▫ プロセスが終了したら再起動
8. SysV initにおけるサービスの起動
• initにより直接起動する機能が提供されているわ
けではない
• サービス毎のrcスクリプトを利用して起動
▫ /etc/rc.d/init.d/サービス名 start
▫ /etc/init.d/サービス名 start
• serviceコマンドによりサービスを起動
▫ service サービス名 start
• 例)sshdの場合
▫ /etc/init.d/sshd start
▫ service sshd start
9. SysV initにおけるサービスの停止
• initにより直接停止する機能が提供されているわ
けではない
• サービス毎のrcスクリプトを利用して停止
▫ /etc/rc.d/init.d/サービス名 stop
▫ /etc/init.d/サービス名 stop
• serviceコマンドによりサービスを停止
▫ service サービス名 stop
• 例)sshdの場合
▫ /etc/init.d/sshd stop
▫ service sshd stop
11. 自動再起動の設定
• 設定ファイル
▫ /etc/inittab
• respawnアクションの記述
▫ ID:ランレベル:respawn:サービスの起動コマンド
• 例)Monit
▫ mo:2345:respawn:/usr/sbin/monit -Ic /etc/monitrc
• 設定の反映
▫ telinit q
12. サービス監視ツールの併用
• respawnの問題点
▫ サービスによってはうまく制御できないことがあ
る。
▫ 停止させることができない。
• daemontoolsやmonitなどサービス監視系のツー
ルをinittabに登録し、自動再起動させたいサー
ビスをその制御下に置くとよい
14. Upstartによるサービスの起動
• initctlコマンドによりサービスを起動
▫ initctl start サービス名
• startコマンドはinitctlのシンボリックリンク
▫ start サービス名
• 後方互換のためにserviceコマンドも使える
▫ service サービス名 start
• 例)sshdの場合
▫ initctl start ssh
▫ start ssh
▫ service ssh start
15. Upstartによるサービスの停止
• initctlコマンドによりサービスを停止
▫ initctl stop サービス名
• stopコマンドはinitctlのシンボリックリンク
▫ stop サービス名
• 後方互換のためにserviceコマンドも使える
▫ service サービス名 stop
• 例)sshdの場合
▫ initctl stop ssh
▫ stop ssh
▫ service ssh stop
19. /etc/init/ssh.conf
# ssh - OpenBSD Secure Shell server
#
# The OpenSSH server provides secure shell access to the system.
description "OpenSSH server"
start on filesystem or runlevel [2345]
stop on runlevel [!2345]
respawn
respawn limit 10 5
umask 022
# 'sshd -D' leaks stderr and confuses things in conjunction with 'console log'
console none
pre-start script
test -x /usr/sbin/sshd || { stop; exit 0; }
test -e /etc/ssh/sshd_not_to_be_run && { stop; exit 0; }
test -c /dev/null || { stop; exit 0; }
mkdir -p -m0755 /var/run/sshd
end script
# if you used to set SSHD_OPTS in /etc/default/ssh, you can change the
# 'exec' line here instead
exec /usr/sbin/sshd -DA
25. サービス毎の設定ファイル
• サービス毎の設定ファイル
▫ /etc/systemd/system/multi-
user.target.wants/XXX.service
• 実態は次のファイルのシンボリックリンク
▫ /usr/lib/systemd/system/XXX.service
• 例)sshdに対する設定ファイル
▫ /etc/systemd/system/multi-
user.target.wants/sshd.service
▫ /usr/lib/systemd/system/sshd.service
26. サービス停止時の動作の設定
• ServiceセクションのRestartの設定値によりサー
ビス停止時の動作を指定できる。
設定値 サービス停止時の動作
no 再起動しない。(デフォルト)
on-success 正常終了したときのみ再起動する。
すなわち、終了コード0の場合。
on-failure 正常終了しなかったときのみ再起動する。
終了コードが0以外、あるいはシグナルによる終了。
on-abort キャッチしていないシグナルの受信により終了したと
きのみ再起動する。
always 正常終了や異常終了やシグナルによる終了をしたとき
再起動する。