導(dǎo)讀: 的速度和易用性使其成為管理現(xiàn)代 Linux 系統(tǒng)的流行方式。
本文字?jǐn)?shù):4926,閱讀時(shí)長(zhǎng)大約:7分鐘
系統(tǒng)管理員知道,在一臺(tái)運(yùn)行著的現(xiàn)代計(jì)算機(jī)上會(huì)發(fā)生很多事情:應(yīng)用程序在后臺(tái)運(yùn)行、預(yù)定事件等待在特定時(shí)間被觸發(fā)、事件寫(xiě)入日志文件、發(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)程( )() 被開(kāi)發(fā)出來(lái),并迅速被所有主要的 Linux 發(fā)行版所采用了。
當(dāng)然, 并不是管理 Linux 系統(tǒng)的唯一方式,還有許多其他可供選擇的初始化系統(tǒng),包括 、、runit、s6 和 ,但 將 Linux 視為一個(gè)統(tǒng)一的數(shù)據(jù)集,意味著 能用強(qiáng)大的工具對(duì) Linux 進(jìn)行一致的操作和查詢。對(duì)于忙碌的系統(tǒng)管理員和許多用戶來(lái)說(shuō), 的速度和易用性是一個(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í)linux查看進(jìn)程狀態(tài)命令,這一時(shí)刻能夠限制查看的數(shù)據(jù)量大小,從而讓你快速地找到問(wèn)題所在。
如果你不記得上次啟動(dòng)計(jì)算機(jī)的時(shí)間,你可以使用 的日志記錄工具,來(lái)列出計(jì)算機(jī)的所有啟動(dòng)會(huì)話:
$ 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
最近一次啟動(dòng)會(huì)話輸出在結(jié)果列表的底部,因此你可以通過(guò)管道將輸出傳輸?shù)絫ail,來(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)行失敗等等信息。故障排除的初始步驟是使用 的來(lái)查看日志:
$ journalctl --pager-end
--pager-end選項(xiàng)(簡(jiǎn)寫(xiě)為-e)會(huì)從的輸出末尾開(kāi)始查看日志,因此要查看更早發(fā)生的日志,你需要向上滾動(dòng)。
維護(hù)一個(gè)錯(cuò)誤信息的“目錄”,錯(cuò)誤信息包含錯(cuò)誤記錄、可能的解決方案、支持論壇的鏈接和開(kāi)發(fā)人員文檔。這個(gè)錯(cuò)誤信息的“目錄”能為日志事件提供重要的上下文,否則它可能會(huì)成為海量日志中的一個(gè)令人困惑的信息,或者更糟的是,錯(cuò)誤信息可能會(huì)完全被忽視。要將錯(cuò)誤消息與日志中的解釋性文本放在一起輸出,你可以使用--選項(xiàng)(簡(jiǎn)寫(xiě)為-x):
$ journalctl --pager-end --catalog
要進(jìn)一步限定日志輸出,你可以指定要查看哪個(gè)啟動(dòng)會(huì)話的日志。因?yàn)槊總€(gè)啟動(dòng)會(huì)話都有索引,所以你可以使用--boot選項(xiàng),來(lái)指定某個(gè)啟動(dòng)會(huì)話,并僅查看該啟動(dòng)會(huì)話的日志:
$ journalctl --pager-end --catalog --boot 42
你還可以查看特定 單元的日志。例如,要解決 SSH 服務(wù)的問(wèn)題linux查看進(jìn)程狀態(tài)命令,你可以指定--unit sshd選項(xiàng),來(lái)僅查看適用于sshd守護(hù)程序的日志:
$ journalctl --pager-end \
--catalog --boot 42 \
--unit sshd
服務(wù)管理
的第一個(gè)任務(wù)就是啟動(dòng)你的計(jì)算機(jī), 會(huì)迅速、高效且有效地執(zhí)行這一任務(wù)。但 一直需要管理的任務(wù)是服務(wù)管理,因?yàn)? 需要確保你要運(yùn)行的服務(wù)確實(shí)在你的會(huì)話期間啟動(dòng),并繼續(xù)運(yùn)行。 的這一功能非常穩(wěn)健,因?yàn)槔碚撋霞词故且粋€(gè)崩潰的服務(wù)也可以在沒(méi)有你干預(yù)的情況下重新啟動(dòng)。
你可以通過(guò)使用命令來(lái)讓 管理服務(wù),并能查看定義服務(wù)的單元文件(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
大多數(shù)單元文件都在/usr/lib///目錄下,但是你也可以用局部更改來(lái)修改配置,請(qǐng)使用以下的方式:
$ systemctl edit sshd
你可以通過(guò)is-選項(xiàng),來(lái)查看某一服務(wù)當(dāng)前是否處于活動(dòng)狀態(tài):
$ systemctl is-active sshd
active
$ systemctl is-active foo
inactive
同樣地,你可以通過(guò)is-選項(xiàng),來(lái)查看某一服務(wù)是否運(yùn)行失敗了。
$ systemctl is-failed sshd
使用以下命令,來(lái)啟動(dòng)或者停止某一服務(wù):
$ systemctl stop sshd
$ systemctl start sshd
使用以下命令,讓某一服務(wù)在開(kāi)機(jī)時(shí)自啟動(dòng):
$ systemctl enable sshd
添加--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ù),也有一些其他好用的替代方案。例如, 命令 是一個(gè)多功能的、類似于cron的系統(tǒng),它能夠運(yùn)行在停機(jī)期間可能會(huì)錯(cuò)過(guò)的任務(wù)。
計(jì)劃的事件就是在特定時(shí)間需要激活的服務(wù)。 管理一個(gè)名為定時(shí)器 的工具,它類似 cron 的功能。你可以使用以下命令,來(lái)列出活動(dòng)中的定時(shí)器:
$ 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.
你可以使用以下命令,來(lái)像啟用服務(wù)一樣啟用定時(shí)器:
$ systemctl enable myMonitor.timer
目標(biāo)管理
目標(biāo)()是 的最后一個(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)有包括桌面單元文件的目標(biāo)。
簡(jiǎn)而言之,目標(biāo)是一種將服務(wù)、定時(shí)器甚至其他的目標(biāo)集合在一起,以表示機(jī)器的預(yù)期狀態(tài)的簡(jiǎn)單方法。
事實(shí)上,在 中,重啟、關(guān)機(jī)或關(guān)閉操作只是一個(gè)目標(biāo)而已。
你可以使用list-unit-files選項(xiàng),用--type選項(xiàng)將其限制為來(lái)列出所有可用的目標(biāo):
$ systemctl list-unit-files --type target
使用 對(duì)計(jì)算機(jī)進(jìn)行控制管理
現(xiàn)代的 Linux 使用 進(jìn)行服務(wù)管理和日志檢查。從個(gè)人的 Linux 系統(tǒng)到企業(yè)服務(wù)器, 都能提供有效的監(jiān)控,并且十分易于維護(hù)。你越頻繁地使用 , 對(duì)你而言就會(huì)變得越容易預(yù)測(cè)和直觀,你就會(huì)明白系統(tǒng)的不同部分是如何相互關(guān)聯(lián)的。
為了更好地熟悉 ,請(qǐng)現(xiàn)在就開(kāi)始使用它吧。請(qǐng)下載關(guān)于 相關(guān)命令的備忘錄 ,你可以在實(shí)際使用 中經(jīng)常參考這個(gè)備忘錄,這樣你就能更快熟悉使用 啦!
via:
作者:Seth 選題:譯者:校對(duì):wxy
本文由LCTT原創(chuàng)編譯,Linux中國(guó)榮譽(yù)推出
LCTT 譯者 :
翻譯:18.0篇|貢獻(xiàn):53天2022-10-06→2022-11-27歡迎遵照 CC-BY-SA 協(xié)議規(guī)定轉(zhuǎn)載,如需轉(zhuǎn)載,請(qǐng)?jiān)谖恼孪铝粞?“轉(zhuǎn)載:公眾號(hào)名稱”,我們將為您添加白名單,授權(quán)“轉(zhuǎn)載文章時(shí)可以修改”。