2012-07-18 #監視ツール勉強会 02initとプロセス再起動株式会社ハートビーツ 滝澤隆史
2私は誰• 氏名: 滝澤 隆史 @ttkzw• 所属: 株式会社ハートビーツ• 何やっている人 ▫ メーラMuttの国際化や日本語対応パッチ作者 ▫ SpamAssassinの日本語対応パッチ作者 ▫ Unbound/NSDの文書の翻訳
アジェンダ• Linuxディストリビューションにおけるinitと起  動・停止の制御および自動再起動について• 対象 ▫ SysV init ▫ Upstart ▫ systemd
Linuxにおけるinit• initはカーネルのブート後に最初に起動するプロセス• 厳密に言うと、 ▫ カーネルは起動時に、initrdとして指定されたinitramfs/initrd   イメージをルートパーティションとしてマウントする。 ...
SysV init                                     inittabの形式                                       ID:ランレベル:アクション:プロセス• /sbin/...
SysV initにおけるサービスの起動• initにより直接起動する機能が提供されているわ  けではない• サービス毎のrcスクリプトを利用して起動 ▫ /etc/rc.d/init.d/サービス名 start ▫ /etc/init.d/サ...
SysV initにおけるサービスの停止• initにより直接停止する機能が提供されているわ  けではない• サービス毎のrcスクリプトを利用して停止 ▫ /etc/rc.d/init.d/サービス名 stop ▫ /etc/init.d/サー...
意図しないサービス停止• サービスの不具合やOOM Killerなど、意図せず  サービスが停止することがある• /etc/inittabでの設定によりサービス停止後の動作  を指定できる。
自動再起動の設定• 設定ファイル ▫ /etc/inittab• respawnアクションの記述 ▫ ID:ランレベル:respawn:サービスの起動コマンド• 例)Monit ▫ mo:2345:respawn:/usr/sbin/monit...
サービス監視ツールの併用• respawnの問題点 ▫ サービスによってはうまく制御できないことがあ   る。 ▫ 停止させることができない。• daemontoolsやmonitなどサービス監視系のツー  ルをinittabに登録し、自動再起...
Upstartによるサービスの起動• initctlコマンドによりサービスを起動 ▫ initctl start サービス名• startコマンドはinitctlのシンボリックリンク ▫ start サービス名• 後方互換のためにservice...
Upstartによるサービスの停止• initctlコマンドによりサービスを停止 ▫ initctl stop サービス名• stopコマンドはinitctlのシンボリックリンク ▫ stop サービス名• 後方互換のためにserviceコマン...
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.desc...
systemdとは• Linux用のシステムおよびサービスのための管理  デーモン• SysV init / LSB initと互換性あり
systemdによるサービスの起動• systemctlコマンドにより起動する ▫ systemctl start サービス名.service• 後方互換のためにserviceコマンドも使える ▫ service サービス名 start• 例)...
systemdによるサービスの停止• systemctlコマンドにより停止する ▫ systemctl stop サービス名.service• 後方互換のためにserviceコマンドも使える ▫ service サービス名 stop• 例)ss...
systemdの制御外でサービス停止• サービスの不具合やOOM Killerなど、systemd  の制御外でサービスが停止することがある• systemdの設定によりサービス停止後の動作を  指定できる。
サービス毎の設定ファイル• サービス毎の設定ファイル ▫ /etc/systemd/system/multi-   user.target.wants/XXX.service• 実態は次のファイルのシンボリックリンク ▫ /usr/lib/sy...
サービス停止時の動作の設定• ServiceセクションのRestartの設定値によりサー  ビス停止時の動作を指定できる。 設定値          サービス停止時の動作 no           再起動しない。(デフォルト) on-succe...
サービス停止時の自動再起動の設定• ServiceセクションにRestart=alwaysを追加 ▫ [Service]   EnvironmentFile=/etc/sysconfig/sshd   ExecStartPre=/usr/sbi...
設定の反映• systemctlコマンドにより設定を反映させる ▫ systemctl --system daemon-reload
デモ• sshdのプロセスをkillしてみよう
initとプロセス再起動
initとプロセス再起動
initとプロセス再起動
initとプロセス再起動
Upcoming SlideShare
Loading in …5
×

initとプロセス再起動

46,361 views

Published on

0 Comments
47 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
46,361
On SlideShare
0
From Embeds
0
Number of Embeds
35,319
Actions
Shares
0
Downloads
114
Comments
0
Likes
47
Embeds 0
No embeds

No notes for slide

initとプロセス再起動

  1. 1. 2012-07-18 #監視ツール勉強会 02initとプロセス再起動株式会社ハートビーツ 滝澤隆史
  2. 2. 2私は誰• 氏名: 滝澤 隆史 @ttkzw• 所属: 株式会社ハートビーツ• 何やっている人 ▫ メーラMuttの国際化や日本語対応パッチ作者 ▫ SpamAssassinの日本語対応パッチ作者 ▫ Unbound/NSDの文書の翻訳
  3. 3. アジェンダ• Linuxディストリビューションにおけるinitと起 動・停止の制御および自動再起動について• 対象 ▫ SysV init ▫ Upstart ▫ systemd
  4. 4. 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
  5. 5. 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 ▫ プロセスが終了したら再起動
  6. 6. 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
  7. 7. 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
  8. 8. 意図しないサービス停止• サービスの不具合やOOM Killerなど、意図せず サービスが停止することがある• /etc/inittabでの設定によりサービス停止後の動作 を指定できる。
  9. 9. 自動再起動の設定• 設定ファイル ▫ /etc/inittab• respawnアクションの記述 ▫ ID:ランレベル:respawn:サービスの起動コマンド• 例)Monit ▫ mo:2345:respawn:/usr/sbin/monit -Ic /etc/monitrc• 設定の反映 ▫ telinit q
  10. 10. サービス監視ツールの併用• respawnの問題点 ▫ サービスによってはうまく制御できないことがあ る。 ▫ 停止させることができない。• daemontoolsやmonitなどサービス監視系のツー ルをinittabに登録し、自動再起動させたいサー ビスをその制御下に置くとよい
  11. 11. Upstartによるサービスの起動• initctlコマンドによりサービスを起動 ▫ initctl start サービス名• startコマンドはinitctlのシンボリックリンク ▫ start サービス名• 後方互換のためにserviceコマンドも使える ▫ service サービス名 start• 例)sshdの場合 ▫ initctl start ssh ▫ start ssh ▫ service ssh start
  12. 12. Upstartによるサービスの停止• initctlコマンドによりサービスを停止 ▫ initctl stop サービス名• stopコマンドはinitctlのシンボリックリンク ▫ stop サービス名• 後方互換のためにserviceコマンドも使える ▫ service サービス名 stop• 例)sshdの場合 ▫ initctl stop ssh ▫ stop ssh ▫ service ssh stop
  13. 13. Upstartの制御外でサービス停止• サービスの不具合やOOM Killerなど、Upstartの 制御外でサービスが停止することがある• Upstartの設定によりサービス停止後の動作を指 定できる。
  14. 14. サービス毎の設定ファイル• サービス毎の設定ファイル ▫ /etc/init/XXX.conf• 例)sshdに対する設定ファイル ▫ /etc/init/ssh.conf
  15. 15. 異常終了時の動作• 設定ファイルにrespawnと記述することにより 異常終了時にサービスを自動再起動させること ができる。
  16. 16. /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
  17. 17. systemdとは• Linux用のシステムおよびサービスのための管理 デーモン• SysV init / LSB initと互換性あり
  18. 18. systemdによるサービスの起動• systemctlコマンドにより起動する ▫ systemctl start サービス名.service• 後方互換のためにserviceコマンドも使える ▫ service サービス名 start• 例)sshdの場合 ▫ systemctl start sshd.service ▫ service sshd start
  19. 19. systemdによるサービスの停止• systemctlコマンドにより停止する ▫ systemctl stop サービス名.service• 後方互換のためにserviceコマンドも使える ▫ service サービス名 stop• 例)sshdの場合 ▫ systemctl stop sshd.service ▫ service stop start
  20. 20. systemdの制御外でサービス停止• サービスの不具合やOOM Killerなど、systemd の制御外でサービスが停止することがある• systemdの設定によりサービス停止後の動作を 指定できる。
  21. 21. サービス毎の設定ファイル• サービス毎の設定ファイル ▫ /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
  22. 22. サービス停止時の動作の設定• ServiceセクションのRestartの設定値によりサー ビス停止時の動作を指定できる。 設定値 サービス停止時の動作 no 再起動しない。(デフォルト) on-success 正常終了したときのみ再起動する。 すなわち、終了コード0の場合。 on-failure 正常終了しなかったときのみ再起動する。 終了コードが0以外、あるいはシグナルによる終了。 on-abort キャッチしていないシグナルの受信により終了したと きのみ再起動する。 always 正常終了や異常終了やシグナルによる終了をしたとき 再起動する。
  23. 23. サービス停止時の自動再起動の設定• 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
  24. 24. 設定の反映• systemctlコマンドにより設定を反映させる ▫ systemctl --system daemon-reload
  25. 25. デモ• sshdのプロセスをkillしてみよう

×