天天看點

系統管理者喜歡 systemd 的 5 個理由

作者:硬核老王
systemd 的速度和易用性使其成為管理現代 Linux 系統的流行方式。
系統管理者喜歡 systemd 的 5 個理由

系統管理者知道,在一台運作着的現代計算機上會發生很多事情:應用程式在背景運作、預定事件等待在特定時間被觸發、事件寫入日志檔案、發送狀态報告。在以前,不同的程序可以通過一系列 Unix 工具,來進行有效地管理和監控。然而,現代的計算機運作更為複雜了:本地服務與容器化應用程式一同運作、能夠輕松通路雲及其運作的叢集、實時程序、以及有比以往都多的資料。

擁有統一的管理方法不但是使用者想要的,也是忙碌的系統管理者所迫切渴望的。為了完成這項重要的任務,系統守護程序system daemon (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 管理服務,并能檢視定義服務的 單元檔案unit file:

$ 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
           

目标管理

目标target 是 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

本文由 LCTT原創編譯,Linux中國榮譽推出

繼續閱讀