読者です 読者をやめる 読者になる 読者になる

起動スクリプト

GNU/Linux

概要

centOSの起動スクリプトについてのメモ。

ランレベル

ランレベル 0 : 稼働中のすべてのデーモンに停止命令を送り、電源を切ります( マザーボード が自動電源オフに対応していない場合は、最後に PowerOff などのメッセージが出るだけになります。)。つまり poweroff などのシステム終了 コマンド と同じ振る舞いをするランレベルです。


ランレベル 1 : WindowsOSのセーフモードに相当します。 root アカウント のみが ログイン 可能で、システムの動作に必要最低限のデーモンのみが起動し、ネットワーク環境などは使用できません。利用目的はWindowsOSのセーフモードと同じく、主に起動プロセスの修復になります。またこのモードではログインにパスワードを必要としませんから、何らかの理由でrootのパスワードが分からなくなってしまったときに利用できます。

ランレベル 2 : 後述のランレベル3からネットワークに関するデーモンのみを起動しないモードです。あまり利用することはないでしょう。

ランレベル 3 : CUI 画面で起動するモードです。 サーバー として稼動させるときは通常このモードを使うことになります。

ランレベル 4 : 予備のモードです。使われていません。

ランレベル 5 : GUI 画面で起動するモードです。 クライアント として稼動させるときは通常このモードを使うことになります。

ランレベル 6 : 稼働中のすべてのデーモンに停止命令を送り、システムを再起動します。つまり reboot などの再起動 コマンド と同じ振る舞いをするランレベルです。



ディレクト

  • /etc/init.d/
  • /etc/rc.local
  • /etc/rc.[0-6].d/
  • /etc/rc.sysinit
  • /etc/rc

いろいろあるけど /etc/rc.dをみている

ll /etc/init.d
lrwxrwxrwx. 1 root root 11 Sep 28 14:02 /etc/init.d -> rc.d/init.d

ll /etc/rc*
lrwxrwxrwx.  1 root root    7 Sep 29 02:17 /etc/rc -> rc.d/rc
lrwxrwxrwx.  1 root root   10 Sep 29 02:17 /etc/rc0.d -> rc.d/rc0.d
lrwxrwxrwx.  1 root root   10 Sep 29 02:17 /etc/rc1.d -> rc.d/rc1.d
lrwxrwxrwx.  1 root root   10 Sep 29 02:17 /etc/rc2.d -> rc.d/rc2.d
lrwxrwxrwx.  1 root root   10 Sep 29 02:17 /etc/rc3.d -> rc.d/rc3.d
lrwxrwxrwx.  1 root root   10 Sep 29 02:17 /etc/rc4.d -> rc.d/rc4.d
lrwxrwxrwx.  1 root root   10 Sep 29 02:17 /etc/rc5.d -> rc.d/rc5.d
lrwxrwxrwx.  1 root root   10 Sep 29 02:17 /etc/rc6.d -> rc.d/rc6.d
lrwxrwxrwx.  1 root root   13 Sep 29 02:17 /etc/rc.local -> rc.d/rc.local
lrwxrwxrwx.  1 root root   15 Sep 29 02:17 /etc/rc.sysinit -> rc.d/rc.sysinit

ll /etc/rc.d/rc6.d/
total 0
lrwxrwxrwx. 1 root root 18 Sep 29 02:20 K01yum-cron -> ../init.d/yum-cron
lrwxrwxrwx. 1 root root 20 Sep 29 02:22 K10munin-node -> ../init.d/munin-node
lrwxrwxrwx. 1 root root 19 Sep 28 14:04 K10saslauthd -> ../init.d/saslauthd
lrwxrwxrwx. 1 root root 22 Jan 13 16:25 K15htcacheclean -> ../init.d/htcacheclean

/etc/rc[0-6].d/各ファイル == /etc/rc[0-6].d/各ファイル

→ /etc/init.d/各ファイル で同じもの指してる

まとめ

/etc/rc.d以下へまとめられている

serviceコマンド

$ which service
/sbin/service

/sbin/service

SERVICEDIR="/etc/init.d"

Upstart

  • RHEL6から導入
  • inittabからrunlevelを抜き出して、以下実行。

/etc/inittab

id:3:initdefault:

↑これだけの記載。ランレベルを参照されるだけのものになった。

起動シーケンス

カーネル起動
start on startupイベント発動
↓
/etc/init/rcS.conf   
↓
/etc/init/rcS.confの中
その中で
@@@@@@@@@@@@@@@@@@
/etc/rc.d/rc.sysinit実行

exec telinit $runlevel 実行

runlevelのイベントを発生
@@@@@@@@@@@@@@@@@@
↓
/etc/init/@@@.confでそれに対応したジョブが実行
↓
runlevel 3 イベントで発動するジョブ
(/etc/init/rc.conf)

このなかで
@@@@@@@@@@@@@@@@@@
/etc/rc.d/rc $runlevel
@@@@@@@@@@@@@@@@@@
↓
これにより
/etc/rc[ランレベル].d/Sを順次実行。
↓

各デーモンが起動して終わり。

/etc/init/rc.conf 見てみる

$ cat /etc/init/rc.conf 
# rc - System V runlevel compatibility
#
# This task runs the old sysv-rc runlevel scripts.  It
# is usually started by the telinit compatibility wrapper.
#
# Do not edit this file directly. If you want to change the behaviour,
# please create a file rc.override and put your changes there.

start on runlevel [0123456]

stop on runlevel [!$RUNLEVEL]

task

export RUNLEVEL
console output
exec /etc/rc.d/rc $RUNLEVEL

etc/rc.d/rc[0-6].d/各ファイルが実行される。

このジョブが終わるとジョブ完了イベント発生。

ジョブ定義ファイル

/etc/init/定義ファイル

/etc/init/定義ファイルにジョブ完了イベント契機のジョブが順次起動 ジョブ完了イベント契機のジョブはいくつかあるようなのでここが並列で実行できる。

/etc/init/tty.conf

  1 # tty - getty~
  2 #~
  3 # This service maintains a getty on the specified device.~
  4 #~
  5 # Do not edit this file directly. If you want to change the behaviour,~
  6 # please create a file tty.override and put your changes there.~
  7 ~
  8 stop on runlevel [S016]~//ここ
  9 ~
 10 respawn~
 11 instance $TTY~
 12 exec /sbin/mingetty $TTY~
 13 usage 'tty TTY=/dev/ttyX  - where X is console id'~

まとめ

Upstartでも前からあるinittabとほぼ同じ起動順番。 ただ、ジョブ化することで並列化できて高速化できるみたい。

参考

http://www.obenri.com/_operation/runlevel.html