• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
initとプロセス再起動
 

initとプロセス再起動

on

  • 17,319 views

 

Statistics

Views

Total Views
17,319
Views on SlideShare
5,170
Embed Views
12,149

Actions

Likes
29
Downloads
70
Comments
0

11 Embeds 12,149

http://heartbeats.jp 12090
http://webcache.googleusercontent.com 31
https://twitter.com 8
http://translate.googleusercontent.com 5
http://www.feedspot.com 4
https://www.google.co.jp 3
http://www.google.co.jp 2
https://si0.twimg.com 2
https://just-now.net 2
http://cloud.feedly.com 1
http://www.google.com 1
More...

Accessibility

Categories

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel

initとプロセス再起動 initとプロセス再起動 Presentation Transcript

  • 2012-07-18 #監視ツール勉強会 02initとプロセス再起動株式会社ハートビーツ 滝澤隆史
  • 2私は誰• 氏名: 滝澤 隆史 @ttkzw• 所属: 株式会社ハートビーツ• 何やっている人 ▫ メーラMuttの国際化や日本語対応パッチ作者 ▫ SpamAssassinの日本語対応パッチ作者 ▫ Unbound/NSDの文書の翻訳
  • アジェンダ• Linuxディストリビューションにおけるinitと起 動・停止の制御および自動再起動について• 対象 ▫ SysV init ▫ Upstart ▫ systemd
  • 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
  • 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 ▫ プロセスが終了したら再起動
  • 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
  • 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
  • 意図しないサービス停止• サービスの不具合やOOM Killerなど、意図せず サービスが停止することがある• /etc/inittabでの設定によりサービス停止後の動作 を指定できる。
  • 自動再起動の設定• 設定ファイル ▫ /etc/inittab• respawnアクションの記述 ▫ ID:ランレベル:respawn:サービスの起動コマンド• 例)Monit ▫ mo:2345:respawn:/usr/sbin/monit -Ic /etc/monitrc• 設定の反映 ▫ telinit q
  • サービス監視ツールの併用• respawnの問題点 ▫ サービスによってはうまく制御できないことがあ る。 ▫ 停止させることができない。• daemontoolsやmonitなどサービス監視系のツー ルをinittabに登録し、自動再起動させたいサー ビスをその制御下に置くとよい
  • Upstartによるサービスの起動• initctlコマンドによりサービスを起動 ▫ initctl start サービス名• startコマンドはinitctlのシンボリックリンク ▫ start サービス名• 後方互換のためにserviceコマンドも使える ▫ service サービス名 start• 例)sshdの場合 ▫ initctl start ssh ▫ start ssh ▫ service ssh start
  • Upstartによるサービスの停止• initctlコマンドによりサービスを停止 ▫ initctl stop サービス名• stopコマンドはinitctlのシンボリックリンク ▫ stop サービス名• 後方互換のためにserviceコマンドも使える ▫ service サービス名 stop• 例)sshdの場合 ▫ initctl stop ssh ▫ stop ssh ▫ service ssh stop
  • Upstartの制御外でサービス停止• サービスの不具合やOOM Killerなど、Upstartの 制御外でサービスが停止することがある• Upstartの設定によりサービス停止後の動作を指 定できる。
  • サービス毎の設定ファイル• サービス毎の設定ファイル ▫ /etc/init/XXX.conf• 例)sshdに対する設定ファイル ▫ /etc/init/ssh.conf
  • 異常終了時の動作• 設定ファイルにrespawnと記述することにより 異常終了時にサービスを自動再起動させること ができる。
  • /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]respawnrespawn limit 10 5umask 022# sshd -D leaks stderr and confuses things in conjunction with console logconsole nonepre-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/sshdend script# if you used to set SSHD_OPTS in /etc/default/ssh, you can change the# exec line here insteadexec /usr/sbin/sshd -DA
  • systemdとは• Linux用のシステムおよびサービスのための管理 デーモン• SysV init / LSB initと互換性あり
  • systemdによるサービスの起動• systemctlコマンドにより起動する ▫ systemctl start サービス名.service• 後方互換のためにserviceコマンドも使える ▫ service サービス名 start• 例)sshdの場合 ▫ systemctl start sshd.service ▫ service sshd start
  • systemdによるサービスの停止• systemctlコマンドにより停止する ▫ systemctl stop サービス名.service• 後方互換のためにserviceコマンドも使える ▫ service サービス名 stop• 例)sshdの場合 ▫ systemctl stop sshd.service ▫ service stop start
  • systemdの制御外でサービス停止• サービスの不具合やOOM Killerなど、systemd の制御外でサービスが停止することがある• systemdの設定によりサービス停止後の動作を 指定できる。
  • サービス毎の設定ファイル• サービス毎の設定ファイル ▫ /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
  • サービス停止時の動作の設定• ServiceセクションのRestartの設定値によりサー ビス停止時の動作を指定できる。 設定値 サービス停止時の動作 no 再起動しない。(デフォルト) on-success 正常終了したときのみ再起動する。 すなわち、終了コード0の場合。 on-failure 正常終了しなかったときのみ再起動する。 終了コードが0以外、あるいはシグナルによる終了。 on-abort キャッチしていないシグナルの受信により終了したと きのみ再起動する。 always 正常終了や異常終了やシグナルによる終了をしたとき 再起動する。
  • サービス停止時の自動再起動の設定• ServiceセクションにRestart=alwaysを追加 ▫ [Service] EnvironmentFile=/etc/sysconfig/sshd ExecStartPre=/usr/sbin/sshd-keygen ExecStart=/usr/sbin/sshd -D $OPTIONS ExecReload=/bin/kill -HUP $MAINPID Restart=always
  • 設定の反映• systemctlコマンドにより設定を反映させる ▫ systemctl --system daemon-reload
  • デモ• sshdのプロセスをkillしてみよう