MIRACLE

メールサービス申込 ユーザー登録&ログイン パートナー情報
お問い合わせ FAQ サイトマップ
MIRACLE LINUXの特長 製品紹介 サービス案内 購入 サポート 技術フォーラム

テクノロジー情報


Linux技術トレーニング 基本管理コース I

第1章 システムの起動と終了

3. ランレベルとサービス(デーモン)の起動停止
3-1. ランレベル
  • システムの実行するサービスのレベル
    • 0 システムの停止
    • 1 シングルユーザーモード
    • 2 NFSファイル共有のないマルチユーザーモード
    • 3 マルチユーザーモード(通常のシステム稼動状態)
    • 4 未使用
    • 5 GUIログインのマルチユーザーモード (通常のシステム稼動状態)
    • 6 再起動
  • デフォルトのランレベルは/etc/inittabに定義されている

ランレベル

Linuxをはじめ多くのUnix系システムではランレベルという概念があります。ランレベルはそのシステムが実行するサービスのレベルを表します。これによりシステムの使い方に制限を設けることができます。デフォルトのランレベルおよびランレベルごとに必要なサービスの起動は/etc/inittabに記述されています。


/etc/inittab

システム起動時にinitプロセスが参照するファイルです。このファイルにはデフォルトのランレベルと、ランレベルごとに起動する各サービスのスクリプト実行の記述が書かれています。システム起動時、このファイルに定義されたデフォルトのランレベルに応じて、サービスが起動します。通常ここで定義されるデフォルトのランレベルは3(マルチユーザーモード)か5(GUIログインのマルチユーザーモード)です。デフォルトのランレベルが0(システム停止)や6(再起動)であるということはありえません。


/etc/inittab
デバイスやシステムの初期化後に起動するinitプロセスが最初に参照するファイルです。
id:3:initdefault:      ←デフォルトのランレベルを指定
# System initialization.
si::sysinit:/etc/rc.d/rc.sysinit
l0:0:wait:/etc/rc.d/rc 0    ←各ランレベルごとrcスクリプトを実行
                    ・・・    Ex) rc 3 ⇒ /etc/rc3.d/ 以下を実行
l6:6:wait:/etc/rc.d/rc 6
                    ・・・
# Run gettys in standard runlevels
1:2345:respawn:/sbin/mingetty tty1
                    ・・・  ←端末制御(ランレベル2〜5で/sbin/mingettyを実行。終了されると再実行)
# Run xdm in runlevel 5
x:5:respawn:/etc/X11/prefdm -nodaemon
                            ←ランレベル5の場合は、Windowマネージャを起動する
<形式:id : run levels : action : process>
  • id:ファイル中のエントリをあらわす。
  • run level:複数のレベルを指定できる。
  • action:実行する動作をあらわす。
    • respawn: processで指定したプロセスを起動し、終了したら再起動する。
    • wait: processで指定したプロセスを起動し、終了を待つ。
    • once: 指定したランレベルへの移行後に1度だけ実行。
    • initdefault: デフォルトランレベルの指定。
    • sysinit: ブート時に実行するプロセス。
    • powerfail: UPSが電源切断を検出したときに実行するプロセス 。
    • powerokwait: UPSが電源オンを検出したときに実行するプロセス。
    • ctrlaltdel: [Ctrl]+[Alt]+[Delete]キーが押された場合。

/etc/rc.sysinit の主な役割

rc.sysinitスクリプトは、inittabファイルの先頭に記述されており、initプロセスから最初に実行されるプログラムです。このスクリプトの主な作業は次の通りです。

ネットワークの初期化
  - /etc/sysconfig/network情報より、ネットワークの有無の確認
・ホスト名の設定
  - /etc/sysconfig/network情報から、kernel上のHOSTNAMEを初期化
・Welcomeバナーの表示
・/procファイルシステムのマウント
  - procファイルシステムを/procへマウント
カーネルパラメータの設定
  - sysctl -e -p /etc/sysctl.conf
・クロックの設定
  - /sbin/hwclock $CLOCKFLAGS
・keymapの読み込み
・システムフォントの読み込み
・スワップの有効化
  - swap -a
必要に応じてfsckの実行
・quotaの有効化
・ハードディスクパラメータの設定
各種ドライバ・モジュールのロード
  - modprobe $alias
・RAIDデバイス
 - /sbin/raidstart $i
・ファイルシステムのマウント
  - mount -f /

3-2. ランレベルの変更
  • システム起動後にランレベルを変更するには initまたはtelinitコマンドを使う。

    (例)システムを緊急停止する場合

    # /sbin/init 0

    (例)システムを再起動する場合

    # /sbin/init 6

    (例)システムをGUIにする場合

    # /sbin/init 5

ランレベルの変更

Initまたは telinit コマンドでランレベルの変更ができます。それにより、ランレベルに応じて必要なサービスが起動し、不要なサービスが停止します。

ランレベルの確認

runlevelコマンドで現在のランレベルおよび前のランレベルが確認できます

# /sbin/runlevel
3  5
  3: 前のランレベル
  5: 現在のランレベル

前のランレベルが「N」のときはシステム起動後現在までにランレベルの変更がされていないことを示します。


3-3. サービスの管理【1】〜 service 〜
  • /sbin/service [サービス名] start | stop
    • /etc/init.d/[サービス名] start | stop
  • 以下と同様のコマンド実行する
    • /etc/rc.d/init.d/[サービス名] start | stop
    • /etc/rc.d/rc?.d/[Sxxサービス名] start
    • /etc/rc.d/rc?.d/[Kxxサービス名] stop

サービス(デーモン)の起動と停止

/etc/init.d/ ディレクトリ以下にあるスクリプトは、serviceコマンドを用いて起動(start)、停止(stop)、スクリプトによっては再起動(restart), 再読込み(reload)などを実行できます。
自分でスクリプトを作成する場合には、最低、start、stop の引数を受け付けるスクリプトを作成する必要があります。作成したスクリプトは、/etc/init.d/ディレクトリ以下に置くことで、serviceコマンドによって起動、停止が可能となります。

# /bin/ls -l /etc/rc.d/rc3.d
合計 0
                           ・・・
lrwxr-xr-x 1 root root 15 6月 29 21:14 K15httpd -> ../init.d/httpd
lrwxr-xr-x 1 root root 13 6月 29 21:20 K20nfs -> ../init.d/nfs
lrwxr-xr-x 1 root root 13 6月 29 21:19 K35smb -> ../init.d/smb
                           ・・・
lrwxr-xr-x 1 root root 17 6月 29 21:09 S10network -> ../init.d/network
lrwxrwxrwx 1 root root 16 6月 30 18:04 S56xinetd -> ../init.d/xinetd
lrwxr-xr-x 1 root root 11 6月 29 21:09 S99local -> ../rc.local
                           ・・・

3-4. サービスの管理【2】〜 chkconfig 〜
  • chkconfig でサービス(スクリプト)の管理を行う
    • /sbin/chkconfig [サービス名] --add: サービスの登録
      /etc/rc?.d/以下へリンクの作成
    • /sbin/chkconfig [サービス名] --del: サービスの削除
      /etc/rc?.d/以下からリンクを削除
       
    • /sbin/chkconfig [サービス名] on : システム起動時に起動の設定
      /etc/rc?.d/以下にSxxサービス名でリンク作成
    • /sbin/chkconfig [サービス名] off : システム停止時に停止の設定
      /etc/rc?.d/以下にKxxサービス名でリンク作成
       
    • /sbin/chkconfig [サービス名] --list: サービスの登録状況の確認

サービス管理

chkconfig コマンドを使用することで、システムの起動時に起動するサービス(デーモン)の設定を行います。内部的には、/etc/init.d/以下のスクリプトを/etc/rc?.dへリンクを作成/削除を行っています。

# /sbin/chkconfig --list httpd
httpd    0:off  1:off  2:off  3:off  4:off  5:off  6:off
# /sbin/chkconfig --level=35 httpd on
# /sbin/chkconfig --list httpd
httpd    0:off  1:off  2:off  3:on   4:off  5:on  6:off
# /bin/ls -l /etc/rc3.d/*httpd
lrwxr-xr-x  ・・・ /etc/rc3.d/S85httpd ->../init.d/httpd

xinetd と chkconfig

xinetdの管理下にあるプロセス(ftp,telnetなど)の有効/無効の操作も以下のコマンドで行えます。

# /sbin/chkconfig telnet on
# vi /etc/xinetd.d/telnet
service telnet
{                  ・・・
        disable         = no
}

3-5. rcスクリプト
  • rcスクリプトにランレベル番号を引数で渡し、該当ランレベル用ディレクトリ内のスクリプトを実行する
    • l3:3:wait:/etc/rc.d/rc 3 ⇒ /etc/rc3.d/*
</etc/rc.d/rc スクリプト 抜粋>
# Now run the START scripts.
for i in /etc/rc$runlevel.d/S* ; do
  check_runlevel "$i" || continue
            ・・・
# Bring the subsystem up.
  if [ "$subsys" = "halt" -o "$subsys" = "reboot" ]; then
            export LC_AL
            exec $i start
※$runlevel によって、/etc/rc$runlevel.d/ 以下の「S 」から始まるスクリプトを start している
  ⇒ サービス起動(デーモンの起動)

Solarisとの違い

Solarisなどの商用Unixでは、ランレベル毎にrcスクリプトが必要とされており、rcスクリプト内でランレベルごとの処理を操作する部分があります。
また、Solarisでは、ランレベル3で起動される際に、ランレベル2のスクリプトも同時に呼ばれるような inittabの設定になっています。

<Solaris /etc/inittab の抜粋>
sS:s:wait:/sbin/rcS         >/dev/msglog 2<>/dev/msglog </dev/console
s0:0:wait:/sbin/rc0 >/dev/msglog 2<>/dev/msglog </dev/console
s1:1:respawn:/sbin/rc1 >/dev/msglog 2<>/dev/msglog </dev/console
s2:23:wait:/sbin/rc2 >/dev/msglog 2<>/dev/msglog </dev/console
s3:3:wait:/sbin/rc3 >/dev/msglog 2<>/dev/msglog </dev/console
s5:5:wait:/sbin/rc5 >/dev/msglog 2<>/dev/msglog </dev/console
s6:6:wait:/sbin/rc6 >/dev/msglog 2<>/dev/msglog </dev/console
そして、/etc/rc?.d/以下のスクリプトは、これもLinuxとは異なり、/etc/init.d/以下からのハードリンクになっているようです。

第1章 2へ 第1章 4へ

■この資料の評価をお願いします。
とても参考になった
参考になった
どちらでもない
あまり参考にならなかった
まったく参考にならなかった

コメントがある場合は以下に記述してください。技術資料として取り上げてほしいテーマも受け付けています。

以下は任意です。

お名前(フルネーム) :
会社名 :
メールアドレス :
 

会社情報 採用情報 個人情報保護方針 情報セキュリティ基本方針 商標等取り扱い事項 English
Copyright(c)2000-2015 MIRACLE LINUX CORPORATION. All Rights Reserved.