在Linux中,如何讓某個服務(假如服務名為 nginx)只在3,5兩個運⾏級別開啟,其他級別關閉?

黄嘉波發表於2024-06-28

在Linux中,使用 systemd 管理服務時,可以透過修改服務單元檔案來控制服務在哪些執行級別上啟動。執行級別(runlevel)是系統啟動時的一組服務集合,每個級別定義了一組應該啟動或停止的服務。

以下是如何設定服務(例如 nginx)只在特定的執行級別(比如3和5)上啟動的步驟:

  1. 找到服務的單元檔案
    通常,服務的單元檔案位於 /etc/systemd/system/ 目錄下。對於 nginx,單元檔案可能是 nginx.service

  2. 建立或編輯符號連結
    systemd 使用 /etc/systemd/system/multi-user.target.wants/(對於執行級別3)和 /etc/systemd/system/graphical.target.wants/(對於執行級別5)目錄下的符號連結來控制服務的啟動。你需要建立指向 nginx.service 的符號連結。

    sudo ln -s /etc/systemd/system/nginx.service /etc/systemd/system/multi-user.target.wants/nginx.service
    sudo ln -s /etc/systemd/system/nginx.service /etc/systemd/system/graphical.target.wants/nginx.service
    
  3. 禁用在其他執行級別的啟動
    如果你不希望 nginx 在其他執行級別上啟動,你需要刪除或禁用那些級別對應的符號連結。例如,如果不想在執行級別2上啟動 nginx,你可以執行:

    sudo rm /etc/systemd/system/multi-user.target.wants/nginx.service
    

    注意:執行級別2通常用於無網路的多使用者文字模式,你可能不需要 nginx 在這個級別上執行。

  4. 重新載入 systemd 管理器配置
    修改符號連結後,需要重新載入 systemd 的配置,使更改生效。

    sudo systemctl daemon-reload
    
  5. 檢查服務狀態
    使用 systemctl 命令檢查服務的狀態,確保它只在你指定的執行級別上啟動。

    sudo systemctl is-enabled nginx
    

    這個命令將顯示服務是否被設定為在執行級別3和5上啟動。

  6. 啟動或停止服務
    根據需要,你可以手動啟動或停止服務:

    sudo systemctl start nginx
    sudo systemctl stop nginx
    
  7. 重啟系統
    為了驗證服務是否按預期工作,你可以重啟系統,並檢查 nginx 是否在指定的執行級別上啟動。

    sudo reboot
    

請注意,systemd 的目標(target)系統允許更靈活的服務管理。例如,multi-user.target 代表多使用者文字模式,graphical.target 代表圖形介面模式。你可以根據需要將服務連結到適當的目標。

綜上所述,systemd 的配置檔案 /etc/systemd/system/nginx.service 也可以直接編輯,以使用 [Unit] 下的 WantsBindsTo 指令來指定服務依賴的其他服務或目標,但這通常不是必需的,除非你需要更復雜的依賴關係。

相關文章