|
||||
Linux技術トレーニング 基本管理コース I第1章 システムの起動と終了3. ランレベルとサービス(デーモン)の起動停止3-1. ランレベル
ランレベル
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>
/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 コマンドでランレベルの変更ができます。それにより、ランレベルに応じて必要なサービスが起動し、不要なサービスが停止します。 ランレベルの確認runlevelコマンドで現在のランレベルおよび前のランレベルが確認できます # /sbin/runlevel 3 53: 前のランレベル 5: 現在のランレベル 前のランレベルが「N」のときはシステム起動後現在までにランレベルの変更がされていないことを示します。 3-3. サービスの管理【1】〜 service 〜
サービス(デーモン)の起動と停止
/etc/init.d/ ディレクトリ以下にあるスクリプトは、serviceコマンドを用いて起動(start)、停止(stop)、スクリプトによっては再起動(restart), 再読込み(reload)などを実行できます。 # /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 コマンドを使用することで、システムの起動時に起動するサービス(デーモン)の設定を行います。内部的には、/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スクリプト
# 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スクリプト内でランレベルごとの処理を操作する部分があります。 sS:s:wait:/sbin/rcS >/dev/msglog 2<>/dev/msglog </dev/consoleそして、/etc/rc?.d/以下のスクリプトは、これもLinuxとは異なり、/etc/init.d/以下からのハードリンクになっているようです。 |