Linux サービス管理の進化論:systemctl と service コマンドの違いと選び方
Linux システム管理において、サービス(Service)の起動、停止、およびステータス監視は、日々の運用における基本スキルです。Linux ディストリビューションの進化に伴い、サービスの管理方法も大きなアーキテクチャの転換を経験しました。初期の SysVinit に基づく service コマンドから、現在主流の systemd とその関連ツール systemctl への移行です。
これら 2 つのツールの違いを理解することは、システム管理者の必須知識であるだけでなく、様々な年代のサーバー環境に直面した際に、正しい判断と対応を行うのに役立ちます。

背景:2 つの起動システムの歴史的文脈
SysVinit と service コマンド
初期の Linux システム(Debian 6、CentOS 5 など)では、最初に起動するプロセス(PID 1)として SysVinit(System V init)が採用されていました。このアーキテクチャでは、サービス管理は /etc/init.d/ ディレクトリに保存された Shell スクリプトを通じて実現されており、service コマンドはこれらのスクリプトを呼び出すための統一インターフェースでした。
# 従来の service コマンドの構文
service <サービス名> <アクション>
/etc/init.d/ 内の各ファイルは本質的に Shell スクリプトであるため、その機能、出力フォーマット、エラー処理の方法は完全に各作成者の実装に依存し、一貫した標準が欠けていました。
systemd と systemctl コマンド
2011 年頃から、systemd は徐々に SysVinit に取って代わり、Fedora、Ubuntu(15.04 以降)、Debian(8 以降)、CentOS/RHEL(7 以降)など、主要なディストリビューションの標準初期化システムとなりました。
systemctl は systemd の主要な管理コマンドであり、システムサービス(Unit)、マウントポイント、ソケット、タイマーなど、さまざまな systemd リソースの制御を担当します。
# systemctl コマンドの構文
systemctl <アクション> <サービス名>
構文の対比:一般的な操作の比較
以下では、nginx サービスを例にして、2 つのコマンドの一般的な操作を対比します。
| 操作 | service コマンド(旧式) | systemctl コマンド(新式) |
|---|---|---|
| サービスの起動 | service nginx start | systemctl start nginx |
| サービスの停止 | service nginx stop | systemctl stop nginx |
| 再起動 | service nginx restart | systemctl restart nginx |
| 設定の再読み込み | service nginx reload | systemctl reload nginx |
| ステータスの確認 | service nginx status | systemctl status nginx |
| 自動起動の有効化 | chkconfig nginx on | systemctl enable nginx |