Linuxのinitプロセス

電源をオンしてから開始されたOSのブートプロセスにおいて、最後のステップを実施するスクリプトである。
initプロセスによって必要な各種サービス・デーモンが起動され、ユーザが利用可能な状態を作り出す。
Linux上に存在するあらゆるプロセスの親でもある。

主な役割としては、initプロセスは、スクリプト「/etc/inittab」を実行してプロセスを作ることにある。

initプロセスは、以下優先順で起動される。
  • /sbin/init
  • /etc/init
  • /bin/init
  • /bin/sh

これ以外にも、カーネルパラメータで「init=」を指定すると優先され実行される。現状、多くのディストリビューションでは/sbin/initを呼び出す。

ブートプロンプトで指定したカーネルパラメータが先述のカーネル起動処理で解釈できなかった場合、引数としてinitプロセスへ渡されるため、これを解釈して実施することも行う。
例えば、Linuxのメンテナンス時に「s」や「S」といったパラメータを指定することが多いが、これはカーネルへ指定したパラメータでなく、厳密にはinitプロセス起動時の引数である。

ランレベルとはシステムのソフトウェア的な設定で、指定したプロセス郡のみを存在させるようにするものである。つまり、ランレベルとは用途や目的に応じて分類させた起動プロセスの集合であり、initが既定で設定された情報「initdefault」を参照したり、あるいは引数で渡された情報を元に決定し、これらを起動する。

これにより、システムの環境を初期化したり、各種デーモンプロセスの起動を行い、最終的にユーザがログインを行える環境を整備する。

その後、initプロセスはシステムが起動している間常駐し、プロセスの監視等を行ったり、telinitによる指示を受け付けたり、シグナルを受信して対応した処理を実施する。

設定・調整


サービスの起動は、ランレベルごとに設定される。
ランレベルは、起動時に指定される0~6の数字で表される。

ランレベル 名称 内容 目的
0 シャットダウン コンピュータが停止される  
1 シングルユーザモード システムを起動し、管理者(root)のみ利用を許可する。 システムメンテナンス
2 マルチユーザモード 1を満たし、かつ複数のユーザにより利用されることを許可する。 Ubuntuのようなクライアント用途で利用される際に用いる事がある。
3 マルチユーザモード 2を満たし、かつネットワークを起動する。 GUIを不要とするようなシステムの場合に利用される。
4 未使用    
5 X11 3を満たし、GUI(X11)を起動する。 2と同様にクライアント用途で利用される際に用いるが、近年のコンピュータは性能が高いためデフォルトとすることが多い。
6 再起動 コンピュータが再起動される。  
(1については、「s」や「S」を用いる事も可能。)

これらは一般的なLinuxのランレベル目的であり、その内容についてはディストリビューションのポリシーによってことなる。
例えば、Debian系では2~4に差はなく、またRedHat系については2や4を未使用とし、ユーザによって自由な定義が行えるものとしている。

設定は以下のディレクトリ上にファイルを配置することにより行う。

# echo /etc/rc?.d
/etc/rc0.d /etc/rc1.d /etc/rc2.d /etc/rc3.d /etc/rc4.d /etc/rc5.d /etc/rc6.d

Linuxの場合、サービスが別のサービスに依存する事があるため、起動する順番が重要となる。そのため、各サービスには起動される順番を表す番号が付与されている。
また、プレフィックスとして「K」もしくは「S」が与えられる。「K」は無視され、逆に「S」は起動されることを意味する。
以下は、ランレベル1で起動されるプロセスである。

# ls /etc/rc1.d
K01smartd        K10psacct     K25sshd        K50snmptrapd   K74acpid      K75netfs      K83rpcgssd         K84wpa_supplicant  K87restorecond  K89portreserve  K95firstboot
K01smolt         K10saslauthd  K30sendmail    K60crond       K74haldaemon  K75ntpdate    K83rpcidmapd       K85mdmonitor       K87rpcbind      K89rdisc        K99microcode_ctl
K02avahi-daemon  K15httpd      K50dnsmasq     K60nfs         K74nscd       K76openvpn    K84NetworkManager  K85messagebus      K88auditd       K90network      S02lvm2-monitor
K05atd           K16abrtd      K50netconsole  K69rpcsvcgssd  K74ntpd       K83bluetooth  K84btseed          K87irqbalance      K88rsyslog      K92ip6tables    S06cpuspeed
K10cups          K24irda       K50snmpd       K73ypbind      K74pcscd      K83nfslock    K84bttrack         K87multipathd      K89netplugd     K92iptables     S26udev-post

これらは実際は、ディレクトリ「/etc/init.d」上に配置された起動スクリプトへのシンボリックリンクである。

# ls -l /etc/rc5.d/S25cups
lrwxrwxrwx. 1 root root 14 2009-12-08 20:28 /etc/rc5.d/S25cups -> ../init.d/cups

ファイルとして扱われているだけあって、bashの機能で十分に設定はおこなえる。
例えば、先ほどのcupsのサービスを次回から起動しない設定とするのであれば、以下のコマンドで行える。

# ln -s /etc/init.d/cups /etc/rc5.d/K25cups

先ほども述べたとおり、Linuxはサービスが別のサービスに依存することがある。
起動を停止する際には、この点に注意を払う必要がある。

chkconfigコマンド

大抵のディストリビューションでは、この設定を容易に行うためのユーティリティを提供している。
chkconfigは、RedHat系ディストリビューションで採用される。

chkconfigではサービスを、追加→変更→削除のプロセスで取り扱う。
まず初めに、サービスの追加を行う。HTTPサービスのデーモンであるhttpdを追加するのであれば、以下のコマンドを入力する。

# chkconfig --add httpd

これにより、initプロセスへhttpdの起動スクリプトが登録される。

# chkconfig --list httpd
httpd           0:off   1:off   2:off   3:off   4:off   5:off   6:off

httpdがどのランレベルで起動するのかを確認できる。

# chkconfig --level 35 httpd on

ランレベル3、5でサービスが起動されるように設定する。

# chkconfig --list httpd
httpd           0:off   1:off   2:off   3:on    4:off   5:on    6:off

ランレベルの3、5が確かにonへ設定されたことを確認。

# chkconfig --del

削除を行うと、

# chkconfig --list httpd
サービス httpd は chkconfig をサポートしますが実行レベルで参照されていません (run 'chkconfig --add httpd')

このように、参照が行えなかった旨を伝えるメッセージが発せられる。

update-rc.dコマンド

Debian系ディストリビューションでは、起動スクリプトの管理にupdate-rc.dを用いる。
こちらは、chkconfigとは若干ポリシーが異なり、機能を抽象化的に見せず、実装に沿った仕様となっている。

# update-rc.d httpd start 15 3 5

これにより、優先順位15でランレベル3,5へhttpdの起動用スクリプトが作成される。

# update-rc.d httpd stop 15 3 5

これで、httpdの停止用スクリプトが作成される。

insservコマンド

openSUSEでは、insservコマンドを用いる。
このコマンドは、起動スクリプト側へ直接設定を書き込み、これをinsservのユーティリティ側に識別させる。

  • 最終更新:2009-12-20 01:00:41

このWIKIを編集するにはパスワード入力が必要です

認証パスワード