Linuxシステムの起動やサービス管理の基礎には、伝統的な**init.d(SysVinit)**の仕組みが存在します。ここではinit.dの基本から設定方法、管理コマンド、現代のsystemdとの違いまで網羅的にまとめます。
init.dとは?
- init.dは、**Unix系システムの初期化プロセス(init: PID 1)**が利用する仕組みの一つで、システムの起動・シャットダウン・ランレベル管理・各種サービスの開始停止を担います。
- シェルスクリプト(sh, bash)が**/etc/init.d**ディレクトリ内にサービス単位で設置され、そのまま実行可能です。
基本動作の流れ
- カーネルの起動が終了するとinitプロセス(PID 1)がスタートする。
- /etc/inittab(またはディストリ独自ファイル)を参照してランレベル(システム動作モード)が決定される。
- ランレベルに応じたスクリプト群が**/etc/rc*.d/**から呼び出される。
- それぞれのサービスの起動・停止が**/etc/init.d/<サービス名>**のスクリプトを通じて実施される。
ランレベルの仕組み
- ランレベルとは「どのサービスをどの起動状態で動かすか」を定義する数字ベースのモードです。
- 0: システム停止
- 1: シングルユーザモード
- 2-5: マルチユーザ(3=通常サーバ、5=GUIなど)
- 6: 再起動
- /etc/inittabでデフォルトモードや起動時アクションを指定します。
例: デフォルトをランレベル3
id:3:initdefault:
init.dスクリプトの特徴
- 実体はシェルスクリプトです。1行目に#!/bin/sh等が書かれ、start/stop/restartなど引数で動きが切り替わります。
- RedHat系では**/etc/init.dと/etc/rc.d/init.dはシンボリックリンク**でつながっており、どちら経由でも操作可能です。
基本的な使い方
サービスの起動・停止・再起動
- 直接実行:
/etc/init.d/<サービス名> start|stop|restart|status
- serviceコマンド経由(より一般的):
自動起動設定(ランレベル連動)
- RedHat系ならchkconfig、Debian/Ubuntuならupdate-rc.dで自動起動制御
スクリプトの配置と登録フロー
- スクリプト作成: /etc/init.d/配下に配置(shebang、start/stop/restart関数必須)
- 実行権付与:
chmod +x /etc/init.d/<サービス名>
- 必要なら登録:
テンプレート活用
管理コマンドまとめ
コマンド | 意味 |
---|---|
/etc/init.d/<サービス名> start | サービス起動 |
/etc/init.d/<サービス名> stop | サービス停止 |
/etc/init.d/<サービス名> restart | サービス再起動 |
/etc/init.d/<サービス名> status | 稼働状況確認 |
service <サービス名> reload | 設定の再読み込み |
chkconfig <サービス名> on/off | 自動起動有効/無効(RedHat系) |
update-rc.d <サービス名> defaults | デフォルトランレベル登録(Debian系) |
init.dとsystemdの違い
- init.d(SysVinit):
- シンプル・管理しやすい・シェルスクリプトベース。
- サービス起動は基本直列。依存関係の制御は限定的。
- systemd:
- 依存関係管理や並列起動が得意。journalctl等の管理機能が豊富。
- ほとんどの最新Linuxディストリではsystemdが標準。
- ただし多くのsystemd環境でも従来のinit.dスクリプトを呼び出し可能(ラッパー動作)。
9. トラブル時のポイント
- スクリプトがコケる場合はshebang記述、パーミッション、エラーログを確認。
- 複雑な常駐プロセス管理にはsystemdへの移行やsupervisordも検討。
10. まとめ
init.dはLinuxの伝統的なサービス管理の土台。スクリプト実装や管理方法の基本を理解すれば、systemd環境での運用やトラブルシュートにも役立ちます。ディストリごとに微妙に操作が違うため、主要コマンドや登録手順は自分の環境で確実に試して確認しましょう。
コメント