全部產品
Search
文件中心

:在Linux執行個體中執行systemctl命令報錯怎麼辦?

更新時間:Aug 17, 2024

本文主要介紹在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)可能預設使用其他初始化系統(如OpenRC、SysVinit或runit),而不是systemd。比如,Windows Subsystem for Linux (WSL)預設情況下使用SysVinit初始化系統而不是systemd。

    • 如果您在一個像Docker或Podman這樣的容器內部執行命令,而該容器未配置為使用systemd作為初始化系統,您可能會遇到這個錯誤。

  • 系統使用了systemd初始化,但systemd遭到損壞或者配置有錯誤。

解決方案

  1. 遠端連線Linux執行個體。

    具體操作,請參見通過密碼或密鑰認證登入Linux執行個體

  2. 執行以下命令,確認系統是否使用systemd初始化。

    ps -p 1 -o comm=
    • 輸出結果為空白或者其他值:表示系統沒有使用systemd進行初始化,請使用與當前初始化系統相對應的服務管理命令。

      說明

      如果您需要使用systemctl相關指令碼執行應用程式,建議使用其他支援systemd的Linux發行版或在Docker容器中運行支援systemd的Linux系統。

      例如,如果系統使用SysVinit(輸出為init),可使用service命令代替systemctl。常見命令對照如下表所示:

      服務作業\命令

      SysVinit

      Systemd

      啟動服務

      sudo service service_name start

      sudo systemctl start service_name

      停止服務

      sudo service service_name stop

      sudo systemctl stop service_name

      重啟服務

      sudo service service_name restart

      sudo systemctl restart service_name

      檢查服務狀態

      sudo service service_name status

      sudo systemctl status service_name

      啟用服務的自啟動

      sudo chkconfig service_name on

      sudo systemctl enable service_name

      關閉服務的自啟動

      sudo chkconfig service_name off

      sudo systemctl disable service_name

    • 輸出結果為systemd:表示系統已通過systemd進行初始化。如果問題仍然存在,則可能是由於系統損壞或配置錯誤造成的。建議您根據相應發行版的官方指南,嘗試恢複systemd服務。