ここでは、Linuxインスタンスで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.
考えられる原因
Systemdは、Linuxシステム上のプロセスを初期化し、そのライフサイクルを管理するために使用される初期化システムおよびサービスマネージャです。 systemctl
は、systemdシステムおよびサービスマネージャ用のコマンドラインツールです。 問題の説明でエラーが発生した場合、考えられる原因は次のとおりです。
システムはsystemdで初期化されません。
一部の古いLinuxディストリビューションまたは特定の軽量ディストリビューション (Devuan、Alpine Linux、Void Linuxなど) は、systemdの代わりにデフォルトで他の初期化システム (OpenRC、SysVinit、runitなど) を使用する場合があります。 たとえば、Windows Subsystem For Linux (WSL) は、デフォルトでSysVinit初期化システムを使用します。
DockerやPodmanなどのコンテナ内でコマンドを実行し、コンテナがsystemdを初期化システムとして使用するように構成されていない場合、このエラーが発生する可能性があります。
システムはsystemdを初期化に使用しますが、systemdが破損または誤構成されています。
解決策
Linuxインスタンスに接続します。
詳細については、「パスワードまたはキーを使用したLinuxインスタンスへの接続」をご参照ください。
次のコマンドを実行して、システムがsystemdで初期化されているかどうかを確認します。
ps -p 1 -o comm=
出力は空またはsystemdとは異なる値です: これは、システムがsystemdで初期化されていないことを示します。 現在の初期化システムに対応するサービス管理コマンドを使用します。
説明systemctl
関連のスクリプトを使用してアプリケーションを実行する必要がある場合は、systemdをサポートする別のLinuxディストリビューションを使用するか、DockerコンテナでsystemdをサポートするLinuxシステムを実行することをお勧めします。たとえば、システムがSysVinit (出力はinit) を使用している場合、
systemctl
の代わりにservice
コマンドを使用できます。 一般的なコマンドの比較を次の表に示します。サービス操作 /コマンド
SysVinit
Systemd
サービスを起動
sudoサービスservice_name start
sudo systemctl start service_name
停止サービス
sudoサービスservice_name stop
sudo systemctl stop service_name
再起動サービス
sudo service service_name restart
sudo systemctl restart service_name
サービスステータスの確認
sudo service service_nameステータス
sudo systemctl status service_name
サービス起動の有効化
sudo chkconfig service_name on
sudo systemctl enable service_name
サービス起動の無効化
sudo chkconfig service_nameオフ
sudo systemctl disable service_name
出力はsystemdです。これは、システムがsystemdで初期化されていることを示します。 問題が解決しない場合は、システムの破損または構成の誤りが原因である可能性があります。 それぞれのディストリビューションの公式ガイドラインを参照し、systemdサービスを回復することをお勧めします。