系統管理員喜歡 systemd 的 5 個理由
系統管理員知道,在一台運行著的現代計算機上會發生很多事情:應用程序在後台運行、預定事件等待在特定時間被觸發、事件寫入日誌文件、發送狀態報告。在以前,不同的進程可以通過一系列 Unix 工具,來進行有效地管理和監控。然而,現代的計算機運作更為複雜了:本地服務與容器化應用程序一同運行、能夠輕鬆訪問雲及其運行的集群、實時進程、以及有比以往都多的數據。
擁有統一的管理方法不但是用戶想要的,也是忙碌的系統管理員所迫切渴望的。為了完成這項重要的任務, 系統守護進程 (systemd) 被開發出來,並迅速被所有主要的 Linux 發行版所採用了。
當然,systemd 並不是管理 Linux 系統的唯一方式,還有許多其他可供選擇的初始化系統,包括 sysvinit、OpenRC、runit、s6 和 BusyBox,但 systemd 將 Linux 視為一個統一的數據集,意味著 systemd 能用強大的工具對 Linux 進行一致的操作和查詢。對於忙碌的系統管理員和許多用戶來說,systemd 的速度和易用性是一個重要的特性。有以下的五個原因。
啟動管理
啟動 Linux 計算機可能是一件非常罕見的事情。伺服器的正常運行時間通常以 年 來計算,而不是月或周。筆記本電腦和台式機可能會頻繁地關閉和啟動,但更多的時候它們是被掛起或休眠了。無論哪種類型,最近一次開機的時刻都可用於檢查一段時間內的計算機健康情況,因為當你在監視系統或診斷問題時,這一時刻能夠限制查看的數據量大小,從而讓你快速地找到問題所在。
如果你不記得上次啟動計算機的時間,你可以使用 systemd 的日誌記錄工具 journalctl
,來列出計算機的所有啟動會話:
$ journalctl --list-boots
-42 7fe7c3... Fri 2020-12-04 05:13:59 - Wed 2020-12-16 16:01:23
-41 332e99... Wed 2020-12-16 20:07:39 - Fri 2020-12-18 22:08:13
[...]
-1 e0fe5f... Mon 2021-03-29 20:47:46 - Mon 2021-03-29 21:59:29
0 37fbe4... Tue 2021-03-30 04:46:13 - Tue 2021-03-30 10:42:08
最近一次啟動會話輸出在結果列表的底部,因此你可以通過管道將輸出傳輸到 tail
,來查看最近一次啟動會話。
左側的數字(在本例中為 42、41、1 和 0)是每個啟動會話的索引號。換句話說,如果你要查看某一特定啟動會話的日誌,你可以使用這個索引號作為參數。
日誌檢查
查看日誌是推斷系統信息的一種重要方法。日誌提供了計算機運行的大部分事件的歷史記錄,這些記錄都是在沒有你直接監督的情況下生成的。通過日誌,你可以知道某一服務何時啟動、定時任務何時運行、哪些服務在後台運行、哪些事件運行失敗等等信息。故障排除的初始步驟是使用 systemd 的 journalctl
來查看日誌:
$ journalctl --pager-end
--pager-end
選項(簡寫為 -e
)會從 journalctl
的輸出末尾開始查看日誌,因此要查看更早發生的日誌,你需要向上滾動。
systemd 維護一個錯誤信息的「目錄」,錯誤信息包含錯誤記錄、可能的解決方案、支持論壇的鏈接和開發人員文檔。這個錯誤信息的「目錄」能為日誌事件提供重要的上下文,否則它可能會成為海量日誌中的一個令人困惑的信息,或者更糟的是,錯誤信息可能會完全被忽視。要將錯誤消息與日誌中的解釋性文本放在一起輸出,你可以使用 --catalog
選項(簡寫為 -x
):
$ journalctl --pager-end --catalog
要進一步限定日誌輸出,你可以指定要查看哪個啟動會話的日誌。因為每個啟動會話都有索引,所以你可以使用 --boot
選項,來指定某個啟動會話,並僅查看該啟動會話的日誌:
$ journalctl --pager-end --catalog --boot 42
你還可以查看特定 systemd 單元的日誌。例如,要解決 SSH 服務的問題,你可以指定 --unit sshd
選項,來僅查看適用於 sshd
守護程序的日誌:
$ journalctl --pager-end
--catalog --boot 42
--unit sshd
服務管理
systemd 的第一個任務就是啟動你的計算機,systemd 會迅速、高效且有效地執行這一任務。但 systemd 一直需要管理的任務是服務管理,因為 systemd 需要確保你要運行的服務確實在你的會話期間啟動,並繼續運行。systemd 的這一功能非常穩健,因為理論上即使是一個崩潰的服務也可以在沒有你干預的情況下重新啟動。
你可以通過使用 systemctl
命令來讓 systemd 管理服務,並能查看定義服務的 單元文件 :
$ systemctl cat sshd
# /usr/lib/systemd/system/sshd.service
[Unit]
Description=OpenSSH server daemon
Documentation=man:sshd(8) man:sshd_config(5)
After=network.target sshd-keygen.target
Wants=sshd-keygen.target
[Service]
Type=notify
EnvironmentFile=-/etc/crypto-policies/back-ends/opensshserver.config
EnvironmentFile=-/etc/sysconfig/sshd
ExecStart=/usr/sbin/sshd -D $OPTIONS $CRYPTO_POLICY
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
Restart=on-failure
RestartSec=42s
[Install]
WantedBy=multi-user.target
大多數單元文件都在 /usr/lib/systemd/system/
目錄下,但是你也可以用局部更改來修改配置,請使用以下的方式:
$ systemctl edit sshd
你可以通過 is-active
選項,來查看某一服務當前是否處於活動狀態:
$ systemctl is-active sshd
active
$ systemctl is-active foo
inactive
同樣地,你可以通過 is-failed
選項,來查看某一服務是否運行失敗了。
$ systemctl is-failed sshd
使用以下命令,來啟動或者停止某一服務:
$ systemctl stop sshd
$ systemctl start sshd
使用以下命令,讓某一服務在開機時自啟動:
$ systemctl enable sshd
添加 --now
選項,讓某一服務在開機時啟動並在當前會話中立即啟動。
定時器管理
在以前,當你想在 Linux 上自動執行一項任務時,你可以使用的工具是 cron
。如今,cron
命令仍能使用,但對於在 Linux 上自動執行一項任務,也有一些其他好用的替代方案。例如,anacron 命令 是一個多功能的、類似於 cron
的系統,它能夠運行在停機期間可能會錯過的任務。
計劃的事件就是在特定時間需要激活的服務。systemd 管理一個名為 定時器 的工具,它類似 cron 的功能。你可以使用以下命令,來列出活動中的定時器:
$ systemctl list-timers
NEXT LEFT
Tue 2021-03-30 12:37:54 NZDT 16min left [...]
Wed 2021-03-31 00:00:00 NZDT 11h left [...]
Wed 2021-03-31 06:42:02 NZDT 18h left [...]
3 timers listed.
Pass --all to see loaded but inactive timers, too.
你可以使用以下命令,來像啟用服務一樣啟用定時器:
$ systemctl enable myMonitor.timer
目標管理
目標 是 systemd 的最後一個主要組成部分。像服務和定時器一樣,目標也是一個單元文件,也可以以相同的方式啟動和啟用。目標的獨特之處在於它們可以將其他單元文件任意分組。例如,你可能希望開機啟動到文本控制台界面而不是圖形桌面,因此有一個 multi-user
目標。但是,multi-user
目標只是沒有包括桌面單元文件的 graphical
目標。
簡而言之,目標是一種將服務、定時器甚至其他的目標集合在一起,以表示機器的預期狀態的簡單方法。
事實上,在 systemd 中,重啟、關機或關閉操作只是一個目標而已。
你可以使用 list-unit-files
選項,用 --type
選項將其限制為 target
來列出所有可用的目標:
$ systemctl list-unit-files --type target
使用 systemd 對計算機進行控制管理
現代的 Linux 使用 systemd 進行服務管理和日誌檢查。從個人的 Linux 系統到企業伺服器,systemd 都能提供有效的監控,並且十分易於維護。你越頻繁地使用 systemd,systemd 對你而言就會變得越容易預測和直觀,你就會明白系統的不同部分是如何相互關聯的。
為了更好地熟悉 systemd,請現在就開始使用它吧。請 下載關於 systemd 相關命令的備忘錄,你可以在實際使用 systemd 中經常參考這個備忘錄,這樣你就能更快熟悉使用 systemd 啦!
via: https://opensource.com/article/21/4/sysadmins-love-systemd
作者:Seth Kenlon 選題:lujun9972 譯者:chai001125 校對:wxy
本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive