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