介紹
近年來,Linux 發行版越來越多地從其他初始化系統過渡到 systemd
。 systemd
套件提供了一個快速靈活的初始化模型,用於管理整個機器從開機開始的過程。
在本指南中,我們將為您快速介紹管理啟用 systemd
的伺服器所需知道的最重要命令。 這些命令應該適用於任何實施 systemd
的伺服器(任何版本為 Ubuntu 15.04 或更高版本、Debian 8、CentOS 7、Fedora 15)。 讓我們開始吧。
基本單元管理
systemd
管理和操作的基本對象是 “單元”。 單元可以是許多類型,但最常見的類型是 “服務”(以 .service
結尾的單元檔案表示)。 要在啟用了 systemd
的伺服器上管理服務,我們的主要工具是 systemctl
命令。
所有正常的初始化系統命令都可以使用 systemctl
命令進行等效操作。 我們將使用 nginx.service
單元來演示(您需要使用套件管理器安裝 Nginx 以獲取此服務檔案)。
例如,我們可以通過輸入以下命令來啟動服務:
我們可以通過輸入:
再次停止它。要重新啟動服務,我們可以輸入:
為了嘗試重新加載服務而不中斷正常功能,我們可以輸入:
啟用或禁用單位
默認情況下,大多數systemd
單位文件在啟動時不會自動啟動。要配置此功能,您需要將單位“啟用”。這將其連接到特定的引導“目標”,使其在該目標啟動時被觸發。
要在啟動時自動啟動服務,請輸入:
如果您希望再次禁用服務,請輸入:
獲取系統狀態概覽
我們可以從systemd
服務器中獲取大量信息,以獲取系統狀態概覽。
例如,要獲取systemd
列為“活動”的所有單位文件,請輸入(實際上可以省略list-units
,因為這是systemctl
的默認行為):
要列出所有systemd
已加載或嘗試加載到內存中的單元,包括那些目前未激活的單元,請添加--all
開關:
要列出系統上安裝的所有單元,包括systemd
未嘗試加載到內存中的單元,請輸入:
查看基本日誌信息
A systemd
component called journald
collects and manages journal entries from all parts of the system. This is basically log information from applications and the kernel.
要查看所有日誌項目,從最舊的項目開始,請輸入:
默認情況下,如果journald
配置為保存上次啟動的記錄,這將為您顯示當前和先前啟動的項目。一些發行版默認啟用此功能,而其他一些則不啟用(要啟用此功能,請編輯/etc/systemd/journald.conf
文件,並將Storage=
選項設置為“persistent”,或者通過輸入sudo mkdir -p /var/log/journal
來創建持久目錄)。
如果您只想查看當前啟動時的日誌項目,請添加-b
標誌:
要僅查看內核消息,例如通常由dmesg
表示的消息,您可以使用-k
標誌:
同樣,您可以通過添加-b
標誌來將此限制為僅當前啟動:
查詢單元狀態和日誌
儘管上述命令讓您可以訪問一般系統狀態,但您也可以獲取有關個別單元狀態的信息。
要查看單元當前狀態的概述,可以使用systemctl
命令的status
選項。這將顯示單元是否活動中,有關進程的信息以及最新的日誌項目:
要查看有關該單元的所有日誌項目,請將-u
選項與journalctl
命令一起使用,並提供單元名稱:
如常,您可以通過添加-b
標誌來限制日誌項目到當前啟動:
檢查單元和單元文件
到目前為止,您已經知道如何通過啟動或停止來修改單元的狀態,並且知道如何查看狀態和日誌信息以了解進程的情況。但是,我們還沒有看到如何檢查單元和單元文件的其他方面。
A unit file contains the parameters that systemd
uses to manage and run a unit. To see the full contents of a unit file, type:
要查看單元的依賴樹(啟動單元時systemd
將嘗試激活的單元),請輸入:
這將顯示依賴單位,並以目標
單位遞迴展開。要遞迴展開所有依賴單位,請傳遞--all
標誌:
最後,要查看系統上單位設置的低級詳細信息,您可以使用show
選項:
這將為您提供由systemd
管理的每個參數的值。
修改單位文件
如果您需要對單位文件進行修改,systemd
允許您從systemctl
命令本身進行更改,因此您無需轉到實際的磁盤位置。
要添加一個單位文件片段,該片段可用於在默認單位文件中附加或覆蓋設置,只需在單位上調用edit
選項:
如果您希望修改整個單位文件的內容而不是創建片段,請傳遞--full
標誌:
修改單位文件後,應重新加載systemd
進程本身以應用您的更改:
使用目標(運行級別)
另一個 init 系統的功能是在不同狀態之間轉換伺服器自身。傳統的 init 系統通常將這些稱為「runlevels」,允許系統同時只能處於一個 runlevel。
在 systemd
中,則使用「targets」。目標基本上是伺服器可以用來將其帶入特定狀態的同步點。服務和其他單位文件可以綁定到一個目標,並且多個目標可以同時處於活動狀態。
要查看系統中所有可用的目標,請輸入:
要查看 systemd
嘗試在啟動時達到的默認目標(這將啟動構成該目標依賴樹的所有單位文件),請輸入:
您可以使用 set-default
選項更改啟動時將使用的默認目標:
要查看與目標綁定的單位,您可以輸入:
您可以使用 isolate
選項修改系統狀態以在不同目標之間轉換。這將停止未綁定到指定目標的任何單位。請確保您隔離的目標不會停止任何必要的服務:
停止或重新啟動伺服器
對於系統可以轉換到的一些主要狀態,可以使用快捷方式。例如,要關閉伺服器,您可以輸入:
如果您希望重新啟動系統,可以通過輸入:
如果您想要進入救援模式,可以通過輸入:
請注意,大多數操作系統都包含傳統的別名來執行這些操作,因此您可以直接輸入sudo poweroff
或sudo reboot
而不需要systemctl
。但是,這並不保證在所有系統上都設置了這些別名。
下一步
到目前為止,您應該了解了如何管理使用systemd
的服務器的基本知識。然而,隨著您的需求擴展,還有更多知識等待您學習。以下是一些指南的鏈接,其中包含了我們在本指南中討論的一些組件的更深入信息:
通過學習如何利用您的初始化系統的優勢,您可以控制機器的狀態,更輕鬆地管理服務和進程。