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
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コマンド経由(より一般的):
service <サービス名> start|stop|restart|status
自動起動設定(ランレベル連動)
- RedHat系ならchkconfig、Debian/Ubuntuならupdate-rc.dで自動起動制御
chkconfig <サービス名> on
/ chkconfig <サービス名> off
update-rc.d <サービス名> defaults
スクリプトの配置と登録フロー
- スクリプト作成: /etc/init.d/配下に配置(shebang、start/stop/restart関数必須)
- 実行権付与:
chmod +x /etc/init.d/<サービス名>
- 必要なら登録:
update-rc.d <サービス名> defaults
(Debian系) chkconfig --add <サービス名>
(RedHat系)
テンプレート活用
- Qiita等にテンプレートスクリプト事例多数。そこからカスタマイズも可能。
管理コマンドまとめ
init.dとsystemdの違い
- init.d(SysVinit):
- シンプル・管理しやすい・シェルスクリプトベース。
- サービス起動は基本直列。依存関係の制御は限定的。
- systemd:
- 依存関係管理や並列起動が得意。journalctl等の管理機能が豊富。
- ほとんどの最新Linuxディストリではsystemdが標準。
- ただし多くのsystemd環境でも従来のinit.dスクリプトを呼び出し可能(ラッパー動作)。
9. トラブル時のポイント
- スクリプトがコケる場合はshebang記述、パーミッション、エラーログを確認。
- 複雑な常駐プロセス管理にはsystemdへの移行やsupervisordも検討。
10. まとめ
init.dはLinuxの伝統的なサービス管理の土台。スクリプト実装や管理方法の基本を理解すれば、systemd環境での運用やトラブルシュートにも役立ちます。ディストリごとに微妙に操作が違うため、主要コマンドや登録手順は自分の環境で確実に試して確認しましょう。