如何在SystemD中更改執行級別(目標)?


SystemD 是 Linux 作業系統的系統和服務管理器。它管理啟動過程、系統服務,並提供一種集中管理程序的方式。SystemD 的關鍵功能之一是使用執行級別(目標)來定義系統啟動時的狀態。

執行級別(目標)是一組服務和程序,根據系統的當前狀態啟動或停止。瞭解如何更改執行級別(目標)對於任何 Linux 管理員來說都是一項重要的技能。

理解執行級別(目標)

在傳統的 Unix 系統中,執行級別用於確定啟動時執行的服務集。SystemD 用更靈活和可配置的目標取代了這些傳統的執行級別。理解目標的概念很重要,因為它們與先前系統的執行級別具有相似的目的,但允許更靈活地控制在任何給定時間執行的服務。

執行級別(目標)及其用途的解釋

SystemD 目標本質上是一組需要一起啟動或停止的服務。這些組可以相互依賴,這意味著如果一個目標需要另一個目標,啟動一個目標也可以啟動另一個目標。目標還可以用於定義啟動時應啟動哪些服務或不應啟動哪些服務。

目標的目的是雙重的:

  • 為管理員提供一種有組織的方式來將一組相關服務作為一個單元進行管理。

  • 為 SystemD 提供一種讀取和儲存有關係統啟動時需要啟動什麼內容的資訊的方式。

SystemD 中不同執行級別(目標)的概述

SystemD 提供多個內建目標,涵蓋系統可以執行的不同狀態:

  • poweroff.target - 此目標用於完全關閉系統。所有正在執行的程序和服務都將在系統關閉之前被優雅地終止。

  • rescue.target - 此目標提供最少的功    能——僅足以讓管理員或使用者對 Linux 安裝進行故障排除。它不包括任何網路或圖形環境支援,因此非常適合在發生嚴重錯誤後進行恢復。

  • multi-user.target - 當系統的多使用者環境啟動時使用此目標,提供完整的網路和圖形支援。

  • graphical.target - 與多使用者目標類似,此目標用於啟動圖形環境。它啟動圖形使用者介面 (GUI) 所需的所有服務。

除了這些內建目標外,管理員還可以建立滿足其需求的自定義目標。自定義目標在 SystemD 單元檔案中定義,本文稍後將詳細討論。現在我們已經基本瞭解了執行級別(目標)是什麼以及它們如何在 SystemD 中工作,讓我們來看看如何更改它們。

更改執行級別(目標)

識別當前執行級別(目標)

在更改執行級別(目標)之前,必須識別當前執行級別(目標)。為此,請開啟終端並執行以下命令:

systemctl get-default  

此命令將顯示當前預設目標。

例如,如果您看到“multi-user.target”,則表示您的系統當前正在執行級別 3。或者,您可以使用以下命令檢查所有活動目標:

systemctl list-units --type=target  

這將顯示所有活動目標及其狀態。

選擇新的執行級別(目標)

確定當前執行級別(目標)後,您可以根據需要選擇一個新的執行級別。例如,如果您想從圖形模式切換到文字模式,則應選擇“multi-user.target”作為您的新目標。

您可以透過執行以下命令檢視所有可用目標:

systemctl list-unit-files --type=target  

此命令的輸出顯示所有可用目標及其說明。仔細選擇滿足您要求的目標。

切換到新的執行級別(目標)

選擇新的目標後,執行以下命令,並將 替換為所選的目標名稱:

sudo systemctl isolate  

這將停止在上一個執行級別(目標)下執行的所有服務和應用程式,並啟動為新選擇的執行級別定義的服務和應用程式。如果出現任何問題,請參閱本文的故障排除部分。

更改執行級別(目標)的高階技術

使用 Systemctl 命令選項臨時或永久更改目標

Systemctl 是用於管理 SystemD 中系統服務的主要命令列工具。它提供了廣泛的選項,允許使用者與系統服務的不同方面進行互動和控制。這些選項之一是能夠臨時或永久更改目標。

要使用 systemctl 臨時更改目標,您可以執行以下命令:

$ sudo systemctl isolate target_name.target  

例如,要臨時從 graphical.target 切換到 multi-user.target,您可以執行:

$ sudo systemctl isolate multi-user.target  

這將立即停止與 graphical.target 關聯的所有服務,並啟動與 multi-user.target 關聯的所有服務。要使用 systemctl 永久更改目標,您可以執行:

$ sudo systemctl set-default target_name.target  

例如,要永久將 multi-user.target 設定為啟動時的預設目標,您可以執行:

$ sudo systemctl set-default multi-user.target  

這將導致 SystemD 在每次系統啟動時都切換到 multi-user.target。

使用符號連結修改預設目標

符號連結是一種包含對另一個檔案或目錄的引用的檔案型別。在 SystemD 中,符號連結通常用於修改預設目標。要使用符號連結修改預設目標,請按照以下步驟操作:

  • 透過執行以下命令來識別當前預設目標:

$ systemctl get-default 
  • 透過執行以下命令建立指向所需目標的新符號連結:

$ sudo ln -sf /usr/lib/systemd/system/target_name .target /etc/systemd/system/default.target 

例如,如果我們希望預設目標為 graphical.target,我們將執行:

$ sudo ln -sf /usr/lib/systemd/system/graphical.target /etc/systemd/system/default.target  
  • 透過執行以下命令驗證是否已設定新的預設目標:

$ systemctl get-default  

以上步驟將修改系統的預設目標。每次系統啟動時,它都將在新的預設目標中啟動。

更改執行級別(目標)時常見問題的故障排除

許可權錯誤

嘗試在 SystemD 中更改執行級別(目標)時,可能會出現的一個常見問題是許可權錯誤。當用戶沒有更改目標檔案所需的許可權時,就會發生這些錯誤。

要解決此問題,在嘗試更改執行級別(目標)之前,可能需要使用 sudo 命令或切換到 root 使用者帳戶。此外,請確保為目標檔案正確設定所有檔案許可權。

服務依賴關係

在 SystemD 中更改執行級別(目標)時,另一個常見問題是服務依賴關係。當服務需要在新執行級別(目標)中不可用的其他服務或資源時,就會發生這些問題。

要解決此問題,可能需要識別導致依賴關係問題的服務並進行相應的更改。這可能包括停用或修改對系統不重要的某些服務。

語法錯誤

語法錯誤也可能在嘗試在 SystemD 中更改執行級別(目標)時導致問題。如果在使用 systemctl 命令更改目標時輸入了錯別字或不正確的命令,則可能會發生這種情況。

要解決此問題,請仔細檢查所有命令語法,並確保與 systemctl 命令一起使用的任何選項或引數都是正確的。如有需要,還可以參考文件或線上資源以瞭解正確的命令語法。

結論

在本文中,我們學習了 SystemD 及其執行級別(目標)。我們探討了 SystemD 中的不同執行級別(目標)以及每個目標的目的。

我們還學習了在 SystemD 中更改執行級別(目標)的分步過程以及執行此操作的一些高階技術。我們討論了在 SystemD 中更改執行級別(目標)時可能出現的一些常見問題以及如何對其進行故障排除。

更新於:2023年8月24日

1K+ 次瀏覽

開啟您的職業生涯

完成課程並獲得認證

開始學習
廣告