systemd 以外の init システムや、破損した systemd 構成によって発生する systemctl エラーを解決します。
症状
Linux インスタンスで systemctl を実行すると、次のいずれかのエラーが返されます。
System has not been booted with systemd as init system (PID 1). Can't operate.
Failed to get D-Bus connection: xxx xxx.
原因
systemctl は、Linux の init システムおよびサービスマネージャーである systemd 向けのコマンドラインツールです。これらのエラーは、以下の理由で発生します。
-
システムが init システムとして systemd を使用していない。
-
一部の古いディストリビューションや軽量 Linux ディストリビューション(例:Devuan、Alpine Linux、Void Linux)は、デフォルトで他の init システム(OpenRC、SysVinit、runit など)を使用しています。たとえば、Windows Subsystem for Linux (WSL) はデフォルトで SysVinit を使用します。
-
Docker または Podman コンテナ内で、systemd を使用するように構成されていない環境でコマンドを実行した場合も、このエラーが発生します。
-
-
システムは systemd を使用しているが、systemd が破損または誤って構成されている。
ソリューション
-
Linux インスタンスに接続します。
詳細については、「Workbench を使用して Linux インスタンスにログインする」をご参照ください。
-
システムが init システムとして systemd を使用しているかどうかを確認します。
ps -p 1 -o comm=-
出力が空または systemd 以外の場合:システムは systemd を使用していません。現在の init システムに対応するサービス管理コマンドを使用してください。
説明systemctlスクリプトが必要な場合は、systemd をサポートする Linux ディストリビューションを使用するか、systemd 対応の Linux システムを Docker コンテナ内で実行してください。たとえば、システムが SysVinit を使用している場合(出力が init)、
systemctlの代わりにserviceコマンドを使用します。以下の表は、一般的なコマンドの比較です。操作/コマンド
SysVinit
Systemd
サービスの起動
sudo service service_name startsudo systemctl start service_nameサービスの停止
sudo service service_name stopsudo systemctl stop service_nameサービスの再起動
sudo service service_name restartsudo systemctl restart service_nameサービスのステータス確認
sudo service service_name statussudo systemctl status service_name自動起動の有効化
sudo chkconfig service_name onsudo systemctl enable service_name自動起動の無効化
sudo chkconfig service_name offsudo systemctl disable service_name -
出力が systemd の場合:システムは systemd を使用しています。エラーが継続する場合は、systemd が破損または誤って構成されている可能性があります。お使いのディストリビューションの公式ドキュメントを参照し、systemd サービスを回復してください。
-