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