系統管理員喜歡 Systemd 的五個理由
系統管理員知道,在一臺運行著的現代計算機上會發生很多事情:應用程序在后臺運行、預定事件等待在特定時間被觸發、事件寫入日志文件、發送狀態報告。在以前,不同的進程可以通過一系列 Unix 工具,來進行有效地管理和監控。然而,現代的計算機運作更為復雜了:本地服務與容器化應用程序一同運行、能夠輕松訪問云及其運行的集群、實時進程、以及有比以往都多的數據。
擁有統一的管理方法不但是用戶想要的,也是忙碌的系統管理員所迫切渴望的。為了完成這項重要的任務,系統守護進程 (systemd) 被開發出來,并迅速被所有主要的 Linux 發行版所采用了。
當然,systemd 并不是管理 Linux 系統的唯一方式,還有許多其他可供選擇的初始化系統,包括 sysvinit、OpenRC、runit、s6 和 BusyBox,但 systemd 將 Linux 視為一個統一的數據集,意味著 systemd 能用強大的工具對 Linux 進行一致的操作和查詢。對于忙碌的系統管理員和許多用戶來說,systemd 的速度和易用性是一個重要的特性。有以下的五個原因。
啟動管理
啟動 Linux 計算機可能是一件非常罕見的事情。服務器的正常運行時間通常以 年 來計算,而不是月或周。筆記本電腦和臺式機可能會頻繁地關閉和啟動,但更多的時候它們是被掛起或休眠了。無論哪種類型,最近一次開機的時刻都可用于檢查一段時間內的計算機健康情況,因為當你在監視系統或診斷問題時,這一時刻能夠限制查看的數據量大小,從而讓你快速地找到問題所在。
如果你不記得上次啟動計算機的時間,你可以使用 systemd 的日志記錄工具 journalctl,來列出計算機的所有啟動會話:
最近一次啟動會話輸出在結果列表的底部,因此你可以通過管道將輸出傳輸到 tail,來查看最近一次啟動會話。
左側的數字(在本例中為 42、41、1 和 0)是每個啟動會話的索引號。換句話說,如果你要查看某一特定啟動會話的日志,你可以使用這個索引號作為參數。
日志檢查
查看日志是推斷系統信息的一種重要方法。日志提供了計算機運行的大部分事件的歷史記錄,這些記錄都是在沒有你直接監督的情況下生成的。通過日志,你可以知道某一服務何時啟動、定時任務何時運行、哪些服務在后臺運行、哪些事件運行失敗等等信息。故障排除的初始步驟是使用 systemd 的 journalctl 來查看日志:
--pager-end? 選項(簡寫為 -e?)會從 journalctl 的輸出末尾開始查看日志,因此要查看更早發生的日志,你需要向上滾動。
systemd 維護一個錯誤信息的“目錄”,錯誤信息包含錯誤記錄、可能的解決方案、支持論壇的鏈接和開發人員文檔。這個錯誤信息的“目錄”能為日志事件提供重要的上下文,否則它可能會成為海量日志中的一個令人困惑的信息,或者更糟的是,錯誤信息可能會完全被忽視。要將錯誤消息與日志中的解釋性文本放在一起輸出,你可以使用 --catalog? 選項(簡寫為 -x):
要進一步限定日志輸出,你可以指定要查看哪個啟動會話的日志。因為每個啟動會話都有索引,所以你可以使用 --boot 選項,來指定某個啟動會話,并僅查看該啟動會話的日志:
你還可以查看特定 systemd 單元的日志。例如,要解決 SSH 服務的問題,你可以指定 --unit sshd? 選項,來僅查看適用于 sshd 守護程序的日志:
服務管理
systemd 的第一個任務就是啟動你的計算機,systemd 會迅速、高效且有效地執行這一任務。但 systemd 一直需要管理的任務是服務管理,因為 systemd 需要確保你要運行的服務確實在你的會話期間啟動,并繼續運行。systemd 的這一功能非常穩健,因為理論上即使是一個崩潰的服務也可以在沒有你干預的情況下重新啟動。
你可以通過使用 systemctl 命令來讓 systemd 管理服務,并能查看定義服務的 單元文件:
大多數單元文件都在 /usr/lib/systemd/system/ 目錄下,但是你也可以用局部更改來修改配置,請使用以下的方式:
你可以通過 is-active 選項,來查看某一服務當前是否處于活動狀態:
同樣地,你可以通過 is-failed 選項,來查看某一服務是否運行失敗了。
使用以下命令,來啟動或者停止某一服務:
使用以下命令,讓某一服務在開機時自啟動:
添加 --now 選項,讓某一服務在開機時啟動并在當前會話中立即啟動。
定時器管理
在以前,當你想在 Linux 上自動執行一項任務時,你可以使用的工具是 cron?。如今,cron? 命令仍能使用,但對于在 Linux 上自動執行一項任務,也有一些其他好用的替代方案。例如,anacron 命令? 是一個多功能的、類似于 cron 的系統,它能夠運行在停機期間可能會錯過的任務。
計劃的事件就是在特定時間需要激活的服務。systemd 管理一個名為 定時器 的工具,它類似 cron 的功能。你可以使用以下命令,來列出活動中的定時器:
你可以使用以下命令,來像啟用服務一樣啟用定時器:
目標管理
目標target 是 systemd 的最后一個主要組成部分。像服務和定時器一樣,目標也是一個單元文件,也可以以相同的方式啟動和啟用。目標的獨特之處在于它們可以將其他單元文件任意分組。例如,你可能希望開機啟動到文本控制臺界面而不是圖形桌面,因此有一個 multi-user? 目標。但是,multi-user? 目標只是沒有包括桌面單元文件的 graphical 目標。
簡而言之,目標是一種將服務、定時器甚至其他的目標集合在一起,以表示機器的預期狀態的簡單方法。
事實上,在 systemd 中,重啟、關機或關閉操作只是一個目標而已。
你可以使用 list-unit-files? 選項,用 --type? 選項將其限制為 target 來列出所有可用的目標:
使用 systemd 對計算機進行控制管理
現代的 Linux 使用 systemd 進行服務管理和日志檢查。從個人的 Linux 系統到企業服務器,systemd 都能提供有效的監控,并且十分易于維護。你越頻繁地使用 systemd,systemd 對你而言就會變得越容易預測和直觀,你就會明白系統的不同部分是如何相互關聯的。
為了更好地熟悉 systemd,請現在就開始使用它吧。請 ??下載關于 systemd 相關命令的備忘錄??,你可以在實際使用 systemd 中經常參考這個備忘錄,這樣你就能更快熟悉使用 systemd 啦!