ランレベルの役割とシステム初期化プロセス
Linuxでは、システムの動作状態を「ランレベル」(実行レベル)によって制御します。各ランレベルに応じて異なるサービスが起動され、テキストモードやGUI環境など、使用可能なシステム環境が変化します。
ブート時の初期化フロー
システム起動時に最初に実行されるのは/sbin/initプロセスです。このプロセスは設定ファイル/etc/inittabを読み込み、デフォルトのランレベルに基づいて対応する初期化スクリプトを実行します。処理の流れは以下の通りです:
/sbin/init → /etc/inittab → /etc/rc.d/rcX.d/ (Xはランレベル)
ランレベルの一覧と用途
/etc/inittabファイルには、使用可能な7つのランレベルが定義されています。
#
# 0 - システム停止(halt)。デフォルトに設定してはいけない。
# 1 - シングルユーザーモード。メンテナンス用。
# 2 - ネットワークなしのマルチユーザー環境。
# 3 - ネットワーク対応のフルマルチユーザー(テキストモード)。
# 4 - 未使用(カスタマイズ可能)。
# 5 - X Window System(GUI)付きのマルチユーザー環境。
# 6 - システム再起動(reboot)。デフォルトに設定してはいけない。
#
id:5:initdefault:
上記例では、id:5:initdefault:により、起動後に自動的にランレベル5が適用されます。これにより、GUI環境が起動します。
現在のランレベルの確認と切り替え
現在のランレベルを確認するには次のコマンドを使用します:
runlevel
出力例:N 5(Nは以前のレベル、5は現在のレベル)
ランレベルを変更するには:
init 3 # テキストモードへ切替
init 5 # GUIモードへ切替
ランレベル別スクリプトディレクトリの構造
ランレベルに応じたスクリプトは/etc/rc.d/rc<レベル>.d/に配置されます。たとえばランレベル5なら/etc/rc.d/rc5.d/です。このディレクトリ内のファイルはシンボリックリンクで、実体は/etc/init.d/にあります。
- Sで始まるファイル:そのサービスを起動することを意味する(Start)
- Kで始まるファイル:そのサービスを停止することを意味する(Kill)
数字は実行順序を示し、小さいものから順に処理されます(例:S85httpd)。
サービスの起動制御とrcスクリプト
/etc/init.d/以下のスクリプトは「rcスクリプト」と呼ばれ、標準的な引数を受け付けます:
/etc/init.d/httpd start
/etc/init.d/httpd stop
/etc/init.d/httpd restart
/etc/init.d/httpd status
また、CentOS 6系ではserviceコマンドを使っても同様の操作が可能です:
service httpd restart
これは内部で/etc/init.d/のスクリプトを呼び出しています。
自動起動の設定方法:chkconfigの使用
サービスを起動時に自動実行させるには、対応するランレベルのrcX.dディレクトリに適切なシンボリックリンクを作成する必要があります。手動ではなく、chkconfigコマンドを使うことで安全かつ簡単に設定できます。
chkconfigの主な使い方
# 現在の設定を確認
chkconfig --list
chkconfig --list sshd
# 新しいサービスを登録(initスクリプトがある前提)
chkconfig --add vsftpd
# 自動起動を有効化(ランレベル3,4,5)
chkconfig vsftpd on
# 特定のランレベルでのみ有効化
chkconfig --level 35 vsftpd on
# 自動起動を無効化
chkconfig vsftpd off
# 登録を削除
chkconfig --del vsftpd
実行例:HTTPDの自動起動設定
[root@localhost ~]# chkconfig httpd --list
httpd 0:off 1:off 2:on 3:on 4:on 5:on 6:off
[root@localhost ~]# ls /etc/rc.d/rc5.d/ | grep httpd
K15httpd
[root@localhost ~]# chkconfig httpd on
[root@localhost ~]# ls /etc/rc.d/rc5.d/ | grep httpd
S85httpd
上記のように、K15httpdがS85httpdに変更され、起動時に自動的にHTTPDが開始されるようになります。
追加起動スクリプトの配置場所
すべてのプログラムに専用のサービススクリプトを作成するのは現実的ではありません。そのため、/etc/rc.d/rc.localファイルを利用すると、カスタムコマンドをブート時に実行できます。
/etc/rc.localは通常、他のすべてのサービスの初期化後に実行されるため、補助的な起動タスクに最適です。例えば:
#!/bin/bash
# /etc/rc.d/rc.local に追加
echo "Starting custom monitor script..."
/opt/scripts/monitor.sh &
このファイルが実行可能であることを確認してください:
chmod +x /etc/rc.d/rc.local