溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Linux的systemctl命令怎么使用

發(fā)布時(shí)間:2022-01-25 10:01:03 來(lái)源:億速云 閱讀:233 作者:iii 欄目:開(kāi)發(fā)技術(shù)

這篇文章主要講解了“Linux的systemctl命令怎么使用”,文中的講解內(nèi)容簡(jiǎn)單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來(lái)研究和學(xué)習(xí)“Linux的systemctl命令怎么使用”吧!

Linux常用命令systemctl 命令是 systemd 系統(tǒng)和服務(wù)的管理命令,systemctl 是與 systemd 交互的主要工具,其實(shí)現(xiàn)的功能包含了 service 和 chkconfig 這兩個(gè)命令的功能。

Linux的systemctl命令怎么使用

命令格式

systemctl [OPTIONS...] COMMAND [NAME...]

選項(xiàng)說(shuō)明

-t, --type=[help, UNITTYPE...]
指明單元類型,使用逗號(hào)分隔。如果是 help,則列出所有可用的 unit type
--state=UNITSTATE...
指明單元的狀態(tài),使用逗號(hào)分隔。例如使用 --state=failed,則在輸出單元列表時(shí)只展示狀態(tài)為 failed 的單元
-p, --property=PROPERTY...
使用 show 命令顯示 unit/job/manager 屬性時(shí),將顯示限制為參數(shù)中指定的屬性,使用逗號(hào)分隔,例如屬性 MainPID
-a, --all
列出單元時(shí),顯示所有加載的單元,無(wú)論其狀態(tài)如何,包括非活動(dòng)單元。顯示 unit/job/manager 屬性時(shí),顯示所有屬性,無(wú)論它們是否已設(shè)置
-r, --recursive
列出單元時(shí),還顯示本地容器的單元。本地容器的單元將以容器名稱作為前綴,并用單個(gè)冒號(hào)字符分隔
--reverse
與命令 list-dependencies 一起使用,顯示單元之間的反向依賴項(xiàng)
--after
與命令 list-dependencies 一起使用,顯示指定單元前面的單元
--before
與命令 list-dependencies 一起使用,顯示指定單元后面的單元
-l, --full
不要省略單元名稱、進(jìn)程樹(shù)條目、日志輸出,也不要截?cái)酄顟B(tài)、單元列表、作業(yè)列表和計(jì)時(shí)器列表輸出中的單元描述
--show-types
顯示套接字時(shí),顯示套接字的類型
--job-mode=MODE
在對(duì)新作業(yè)排隊(duì)時(shí),此選項(xiàng)控制如何處理已排隊(duì)的作業(yè)??扇≈?nbsp;fail、replace、replace_irreversibly、isolate、ignore-dependencies、ignore-requirements 或 flush 之一。默認(rèn)為 replace,除非使用了表示隔離作業(yè)模式的 isolate 命令
-i, --ignore-inhibitors
當(dāng)系統(tǒng)關(guān)閉或睡眠請(qǐng)求時(shí),忽略約束鎖,否則系統(tǒng)關(guān)閉或睡眠請(qǐng)求會(huì)失敗。應(yīng)用程序可以建立約束鎖,以避免某些重要操作(如CD刻錄或類似操作)被系統(tǒng)關(guān)閉或睡眠狀態(tài)中斷
-q, --quiet
靜默模式,抑制 snapshot, is-active, is-failed, is-enabled, is-system-running, enable 和 disable 命令的標(biāo)準(zhǔn)輸出
--no-block
不同步等待請(qǐng)求的操作完成。如果未指定該選項(xiàng),驗(yàn)證完作業(yè)并排隊(duì),systemctl 將等待作業(yè)完成
--system
與服務(wù)管理器(service manager)交互。為缺省選項(xiàng)
--no-wall
在 halt, power-off, reboot 操作前不發(fā)出警告
--no-reload
當(dāng)與命令 enable 和 disable 一起使用時(shí),不隱式重新加載守護(hù)程序的配置
--no-ask-password
當(dāng)與 start 和相關(guān)命令一起使用時(shí),禁止請(qǐng)求密碼
--kill-who=WHO
與命令 kill 一起使用時(shí),選擇向哪個(gè)進(jìn)程發(fā)送信號(hào)。必須是 main、control 或 all 中的一個(gè),分別選擇殺死主進(jìn)程、控制進(jìn)程還是單元的所有進(jìn)程
-s, --signal=SIGNAL
與命令 kill 一起使用,選擇向進(jìn)程發(fā)送的信號(hào)。缺省為 SIGTERM
-f, --force
與 enable 一起使用時(shí),覆蓋任何現(xiàn)有沖突的符號(hào)鏈接。與 halt、poweroff、reboot 或 kexec 一起使用時(shí),在不關(guān)閉所有單元的情況下執(zhí)行所選操作
--now
當(dāng)與 enable 一起使用時(shí),單元也將啟動(dòng)。當(dāng)與 disable 或 mask 一起使用時(shí),單元也將停止
--root=PATH
當(dāng)與 enable/disable/is-enabled(等相關(guān)命令)一起使用時(shí),在查找單元文件時(shí)使用指定的根路徑
--runtime
當(dāng)與 enable、disable、edit(等相關(guān)命令)一起使用時(shí),只需臨時(shí)進(jìn)行更改,以便在下次系統(tǒng)重新啟動(dòng)時(shí)丟失這些更改
--preset-mode=MODE
與命令 preset 或 preset-all 一起使用時(shí),預(yù)設(shè)模式為 full(缺省)、enable-only 或 disable-only 三者之一
-n, --lines=NUM
與命令 status 一起使用時(shí),控制日志文件顯示的行數(shù)。默認(rèn)為 10
-o, --output=FORMAT
與命令 status 一起使用時(shí),控制日志條目的顯示格式,默認(rèn)為 short。其它取值可參考明林 journalctl(1)
--plain
當(dāng)與命令 list-dependencies 一起使用時(shí),輸出將打印為列表而不是樹(shù)
-H, --host=HOST
指定遠(yuǎn)程主機(jī)名,或用戶名@主機(jī)名進(jìn)行遠(yuǎn)程操作。機(jī)名可以選擇用一個(gè)容器名作為后綴,用 : 分隔
-M, --machine=MACHINE
指定本地容器名
--no-pager
不將管道輸出送到分頁(yè)瀏覽工具
--no-legend
不打印列頭和列腳
-h, --help
顯示幫助信息并退出
--version
顯示版本信息并退出

命令說(shuō)明

實(shí)際上 systemctl 子命令的使用頻率會(huì)比選項(xiàng)更加頻繁,主要有單元命令(Unit Commands)、單元文件命令(Unit File Commands)、容器命令(Machine Commands)、作業(yè)命令(Job Commands)、快照命令(Snapshot Commands)、環(huán)境命令(Environment Commands)、管理器生命周期命令(Manager Lifecycle Commands)、系統(tǒng)命令(System Commands)

單元命令(Unit Commands)

list-units [PATTERN...]
列出所有已啟動(dòng)的單元。如果指定一個(gè)或多個(gè)匹配模式,則只顯示符合某個(gè)模式的單元。該命令為默認(rèn)命令
list-sockets [PATTERN...]
列出套接字單元,按照監(jiān)聽(tīng)的地址排列輸出。如果指定一個(gè)或多個(gè)匹配模式,則只顯示符合某個(gè)模式的單元
list-timers [PATTERN...]
列出按時(shí)間順序排列的計(jì)時(shí)器單元。如果指定一個(gè)或多個(gè)匹配模式,則只顯示符合某個(gè)模式的單元
start PATTERN...
啟動(dòng)指定的單元
stop PATTERN...
停止指定的單元
reload PATTERN...
重新加載指定單元服務(wù)的配置文件。注意,是重新加載服務(wù)的配置,而不是 systemd 的單元配置文件。如果希望 systemd 重新加載單元的配置文件,請(qǐng)使用 daemon-reload 命令。換句話說(shuō):對(duì)于 Apache 的示例,這將在 web 服務(wù)器中重新加載 Apache 的 httpd.conf,而不是 apache.service systemd 單元文件
restart PATTERN...
重啟指定的單元
try-restart PATTERN...
嘗試重啟指定的單元。如果單元不處于運(yùn)行狀態(tài),則不進(jìn)行重啟
reload-or-restart PATTERN...
重新加載指定單元服務(wù)的配置文件。如果失敗則重啟服務(wù)
reload-or-try-restart PATTERN...
重新加載指定單元服務(wù)的配置文件。如果失敗則嘗試重啟服務(wù)。如果單元不處于運(yùn)行狀態(tài),則不進(jìn)行重啟
isolate NAME
啟動(dòng)命令行中指定的單元及其依賴項(xiàng),并停止所有其他的單元
kill PATTERN...
向單元的一個(gè)或多個(gè)進(jìn)程發(fā)送信號(hào)。使用 --kill who= 選擇要終止的進(jìn)程。使用 --signal= 選擇要發(fā)送的信號(hào)
is-active PATTERN...
檢查指定單元是否處于 active 狀態(tài)。如果至少一個(gè)是活動(dòng)的,則返回退出代碼 0,否則為非零
is-failed PATTERN...
檢查指定單元是否處于 failed 狀態(tài)。如果至少一個(gè)是失敗的,則返回退出代碼 0,否則為非零
status [PATTERN...|PID...]
顯示一個(gè)或多個(gè)單元的簡(jiǎn)要運(yùn)行時(shí)狀態(tài)信息,然后是日志中的最新日志數(shù)據(jù)。如果未指定單位,則顯示系統(tǒng)狀態(tài)。如果與 --all 結(jié)合使用,還將顯示所有單元的狀態(tài)。如果給定 PID,則顯示進(jìn)程所屬單元的信息
show [PATTERN...|JOB...]
顯示一個(gè)或多個(gè)單元、作業(yè)或管理器本身的屬性。如果未指定參數(shù),則將顯示管理器的屬性
cat PATTERN...
顯示一個(gè)或多個(gè)單元的配置文件
set-property NAME ASSIGNMENT...
在運(yùn)行時(shí)設(shè)置指定的單元屬性。如果同時(shí)使用 --runtime 選項(xiàng),則下一次系統(tǒng)重啟屬性將失效
help PATTERN...|PID...
顯示一個(gè)或多個(gè)單元的手冊(cè)頁(yè)(如果可用)。如果給定了PID,則顯示該進(jìn)程所屬單元的手冊(cè)頁(yè)
reset-failed [PATTERN...]
重置指定單元的 failed 狀態(tài),如果未指定單元名稱,則重置所有單元的 failed 狀態(tài)
list-dependencies [NAME]
顯示指定單元所依賴的單元。它遞歸地列出 Requires=、RequiresOverridable=、Requisite=、RequisiteOverridable=、Wants=、BindsTo= 依賴項(xiàng)之后的單元。如果未指定單位,缺省為 default.target

單元文件命令(Unit File Commands)

list-unit-files [PATTERN...]
列出已安裝的單元文件及其啟用狀態(tài)
enable NAME...
啟用一個(gè)或多個(gè)單元文件或單元文件實(shí)例。這將創(chuàng)建一些符號(hào)鏈接,記錄在單元文件的 Install 部分。創(chuàng)建符號(hào)鏈接后,將重新加載 systemd 配置以確保立即生效
disable NAME...
禁用一個(gè)或多個(gè)單元。這將從單元配置目錄中刪除指向指定單元文件的所有符號(hào)鏈接,從而撤消由 enable 所做的更改。移除符號(hào)鏈接后,將重新加載 systemd 配置以確保立即生效。注意,此命令不會(huì)隱式停止正在禁用的單元。如果需要的話,使用 --now 選項(xiàng),要么在之后執(zhí)行一個(gè)附加的 stop 命令
reenable NAME...
重新啟用一個(gè)或多個(gè)單元文件。這是 disable 和 enable 的組合,用于將啟用單元的符號(hào)鏈接重置為單元文件 Install 部分中配置的值
preset NAME...
重置指定單元文件的 disable/enable 狀態(tài)為預(yù)設(shè)策略文件中配置的值。可以與選項(xiàng) --preset-mode 聯(lián)用選擇重置的結(jié)果狀態(tài)。關(guān)于預(yù)設(shè)策略格式的詳細(xì)信息,參見(jiàn) systemd.preset(5)
preset-all
將所有已安裝的單元文件重置為預(yù)設(shè)策略文件中配置的默認(rèn)值??梢耘c選項(xiàng) --preset-mode 聯(lián)用選擇重置的結(jié)果狀態(tài)
is-enabled NAME...
檢查是否啟用了指定的單元文件
mask NAME...
屏蔽一個(gè)或多個(gè)單元文件,把這些單元鏈接到 /dev/null,使它們無(wú)法啟動(dòng)
unmask NAME...
反屏蔽一個(gè)或多個(gè)單元文件
link FILENAME...
將不在單元文件搜索路徑中的單元文件鏈接到單元文件搜索路徑中,這需要單元文件的絕對(duì)路徑
add-wants TARGET NAME..., add-requires TARGET NAME...
給指定單元添加依賴
edit NAME...
編輯插入片段或使用選項(xiàng) --full 表示替換整個(gè)文件,以擴(kuò)展或重寫指定的單元
get-default
返回別名為 default.target 的單元
set-default NAME
設(shè)置默認(rèn)的單元,使 default.target 軟鏈接到目標(biāo)單元

容器命令(Machine Commands)

list-machines [PATTERN...]
列出主機(jī)和所有正在運(yùn)行的本地容器及其狀態(tài)。如果指定了一個(gè)或多個(gè)模式,則只顯示與其中一個(gè)模式匹配的容器

作業(yè)命令(Job Commands)

list-jobs [PATTERN...]

cancel JOB...
列出正在進(jìn)行的作業(yè)。如果指定了一個(gè)或多個(gè)模式,則只顯示與其中一個(gè)模式匹配的單元的作業(yè)
cancel JOB...
取消一個(gè)或多個(gè)指定作業(yè) ID 的作業(yè)。如果未指定作業(yè) ID,則取消所有掛起的作業(yè)

快照命令(Snapshot Commands)

snapshot [NAME]
創(chuàng)建指定名稱的快照。如果未指定快照名則自動(dòng)生成??煺罩傅氖?nbsp;systemd 管理器的保存狀態(tài)。它被實(shí)現(xiàn)為一個(gè)使用此命令動(dòng)態(tài)生成的單元,并且依賴于當(dāng)時(shí)活動(dòng)的所有單元。稍后,用戶可以使用快照單元上的 isolate 命令返回到該狀態(tài)
delete PATTERN...
刪除快照

環(huán)境命令(Environment Commands)

show-environment
顯示 systemd manager 使用的環(huán)境變量
set-environment VARIABLE=VALUE...
設(shè)置 systemd manager 使用的環(huán)境變量
unset-environment VARIABLE...
取消一個(gè)或多個(gè) systemd manager 的環(huán)境變量
import-environment [VARIABLE...]
將客戶端上設(shè)置的一個(gè)或多個(gè)環(huán)境變量導(dǎo)入 systemd manager 環(huán)境塊。如果未傳遞參數(shù),則導(dǎo)入整個(gè)環(huán)境塊

管理器生命周期命令(Manager Lifecycle Commands)

daemon-reload
重新加載 systemd 管理器配置。這將重新運(yùn)行所有生成器(請(qǐng)參閱 systemd.generator(7)),重新加載所有單元文件,并重新創(chuàng)建整個(gè)依賴關(guān)系樹(shù)。在重新加載守護(hù)進(jìn)程時(shí),所有 systemd 監(jiān)聽(tīng)的代表用戶配置的 sockets,保持可訪問(wèn)狀態(tài)
daemon-reexec
重新執(zhí)行 systemd 管理器

系統(tǒng)命令(System Commands)

is-system-running
檢查系統(tǒng)是否正在運(yùn)并返回當(dāng)前的系統(tǒng)狀態(tài),狀態(tài)有 initializing,starting,running,degraded,maintenance,stopping
default
進(jìn)入默認(rèn)模式,等同于子命令 isolate default.target
rescue
進(jìn)入救援模式。等同于子命令 isolate rescue.target,會(huì)向所有用戶打印警告消息
emergency
進(jìn)入緊急模式。等同于子命令 isolate emergency.target,會(huì)向所有用戶打警告消息
halt
關(guān)閉并停止系統(tǒng)。等同于子命令 start halt.target --irreversible
poweroff
關(guān)閉并關(guān)閉系統(tǒng)電源。等同于子命令 start poweroff.target --irreversible,會(huì)向所有用戶打印警告消息
reboot [arg]
關(guān)閉并重新啟動(dòng)系統(tǒng)。等同于子命令 start reboot.target --irreversible,會(huì)向所有用戶打印警告消息
kexec
通過(guò) kexec 關(guān)閉并重新啟動(dòng)系統(tǒng)。等同于子命令 start kexec.target --irreversible,會(huì)向所有用戶打印警告消息
switch-root ROOT [INIT]
切換到不同的根目錄并在其下執(zhí)行新的系統(tǒng)管理器進(jìn)程
suspend
暫停系統(tǒng)
hibernate
使系統(tǒng)休眠。這將激活特殊的 hibernate.target 目標(biāo)
hybrid-sleep
休眠并掛起系統(tǒng)。這將激活特殊的 hybrid-sleep.target 目標(biāo)

實(shí)際上,systemctl 常用的子命令并不多,主要有:

start 啟動(dòng)服務(wù)
stop 停止服務(wù)
restart 重啟服務(wù)
enable 使某服務(wù)開(kāi)機(jī)自啟
disable 關(guān)閉某服務(wù)開(kāi)機(jī)自啟
status 查看服務(wù)狀態(tài)
list-units -–type=service 列舉所有已啟動(dòng)服務(wù)

常用示例

(1)使用 systemctl 管理系統(tǒng)。

# 重啟系統(tǒng)
systemctl reboot

# 關(guān)閉系統(tǒng),切斷電源
systemctl poweroff

# CPU停止工作
systemctl halt

# 暫停系統(tǒng)
systemctl suspend

# 讓系統(tǒng)進(jìn)入冬眠狀態(tài)
systemctl hibernate

# 讓系統(tǒng)進(jìn)入交互式休眠狀態(tài)
systemctl hybrid-sleep

# 啟動(dòng)進(jìn)入救援狀態(tài)(單用戶狀態(tài))
systemctl rescue

(2)使用 systemctl list-units 查看系統(tǒng)的單元。

# 列出正在運(yùn)行的 unit
systemctl
# 或
systemctl list-units

# 列出所有 unit,包括沒(méi)有運(yùn)行的 unit
systemctl list-units --all

# 列出所有沒(méi)有運(yùn)行的 unit
systemctl list-units --all --state=inactive

# 列出所有加載失敗的 unit
systemctl list-units --failed

# 列出所有正在運(yùn)行的、類型為 service 的 unit
systemctl list-units --type=service

(3)使用 systemctl status 查看系統(tǒng)狀態(tài)和單個(gè) unit 的狀態(tài)。

# 顯示系統(tǒng)狀態(tài)
systemctl status

# 顯示單個(gè) unit 的狀態(tài)
sysystemctl status sshd.service

# 顯示遠(yuǎn)程主機(jī)的某個(gè) unit 的狀態(tài)
systemctl -H root@rhel7.example.com status httpd.service

(4)服務(wù)管理。

# 啟動(dòng)一個(gè)服務(wù)
systemctl start apache.service

# 停止一個(gè)服務(wù)
systemctl stop apache.service

# 重啟一個(gè)服務(wù)
systemctl restart apache.service

# 殺死一個(gè)服務(wù)的所有子進(jìn)程
systemctl kill apache.service

# 重新加載一個(gè)服務(wù)的配置文件
systemctl reload apache.service

# 重新加載 systemd 管理器配置
systemctl daemon-reload

# 顯示某個(gè) unit 的所有底層參數(shù)
systemctl show httpd.service

# 顯示某個(gè) unit 的指定屬性的值
systemctl show -p CPUShares httpd.service

# 設(shè)置某個(gè) unit 的指定屬性
systemctl set-property httpd.service CPUShares=500

(5)查看 unit 之間的依賴關(guān)系。 A 依賴于 B,意味著 systemd 在啟動(dòng) A 的時(shí)候,同時(shí)會(huì)去啟動(dòng) B。

# 列出一個(gè) Unit 的所有依賴
$ systemctl list-dependencies nginx.service

上面命令的輸出結(jié)果之中,有些依賴是 Target 類型,默認(rèn)不會(huì)展開(kāi)顯示。如果要展開(kāi) Target,就需要使用 –all 參數(shù)。

systemctl list-dependencies --all nginx.service

(6)設(shè)置服務(wù)開(kāi)機(jī)啟動(dòng)。 systemd 默認(rèn)從目錄 /etc/systemd/system/ 讀取配置文件。但是,里面存放的大部分文件都是符號(hào)鏈接,指向目錄 /usr/lib/systemd/system/,真正的配置文件存放在那個(gè)目錄。systemctl enable命令用于在上面兩個(gè)目錄之間,建立符號(hào)鏈接關(guān)系。

systemctl enable sshd.service
# 等同于
ln -s /usr/lib/systemd/system/sshd.service /etc/systemd/system/multi-user.target.wants/sshd.service'

如果配置文件里面設(shè)置了開(kāi)機(jī)啟動(dòng),systemctl enable命令相當(dāng)于激活開(kāi)機(jī)啟動(dòng)。與之對(duì)應(yīng)的,systemctl disable 命令用于在兩個(gè)目錄之間,撤銷符號(hào)鏈接關(guān)系,相當(dāng)于撤銷開(kāi)機(jī)啟動(dòng)。

systemctl disable sshd.service

配置文件的后綴名,就是該 unit 的種類,比如 sshd.socket。如果省略,systemd 默認(rèn)后綴名為 .service,所以 sshd 會(huì)被理解成 sshd.service。

拓展知識(shí)

Unit

配置文件的格式

systemd 可以管理所有系統(tǒng)資源,不同的資源統(tǒng)稱為單元(unit)。unit 一共分成 12 種。

Service unit:系統(tǒng)服務(wù)
Target unit:多個(gè) Unit 構(gòu)成的一個(gè)組
Device Unit:硬件設(shè)備
Mount Unit:文件系統(tǒng)的掛載點(diǎn)
Automount Unit:自動(dòng)掛載點(diǎn)
Path Unit:文件或路徑
Scope Unit:不是由 Systemd 啟動(dòng)的外部進(jìn)程
Slice Unit:進(jìn)程組
Snapshot Unit:Systemd 快照,可以切回某個(gè)快照
Socket Unit:進(jìn)程間通信的 socket
Swap Unit:swap 文件
Timer Unit:定時(shí)器

每一個(gè) Unit 都有一個(gè)配置文件,告訴 Systemd 怎么啟動(dòng)這個(gè) Unit 。配置文件就是普通的文本文件,可以用文本編輯器打開(kāi),也可以使用 systemctl cat 命令查看配置文件的內(nèi)容。

systemctl cat sshd.service

# /usr/lib/systemd/system/sshd.service
[Unit]
Description=OpenSSH server daemon
Documentation=man:sshd(8) man:sshd_config(5)
After=network.target sshd-keygen.service
Wants=sshd-keygen.service

[Service]
EnvironmentFile=/etc/sysconfig/sshd
ExecStart=/usr/sbin/sshd -D $OPTIONS
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
Restart=on-failure
RestartSec=42s

[Install]
WantedBy=multi-user.target

從上面的輸出可以看到,配置文件分成幾個(gè)區(qū)塊。每個(gè)區(qū)塊的第一行,是用方括號(hào)表示的區(qū)別名,比如[Unit]。注意,配置文件的區(qū)塊名和字段名,都是大小寫敏感的。每個(gè)區(qū)塊內(nèi)部是一些等號(hào)連接的鍵值對(duì)。注意,鍵值對(duì)的等號(hào)兩側(cè)不能有空格。

配置文件的區(qū)塊

[Unit]區(qū)塊通常是配置文件的第一個(gè)區(qū)塊,用來(lái)定義 Unit 的元數(shù)據(jù),以及配置與其他 Unit 的關(guān)系。它的主要字段如下。

Description:簡(jiǎn)短描述
Documentation:文檔地址
Requires:當(dāng)前 Unit 依賴的其他 Unit,如果它們沒(méi)有運(yùn)行,當(dāng)前 Unit 會(huì)啟動(dòng)失敗
Wants:與當(dāng)前 Unit 配合的其他 Unit,如果它們沒(méi)有運(yùn)行,當(dāng)前 Unit 不會(huì)啟動(dòng)失敗
BindsTo:與Requires類似,它指定的 Unit 如果退出,會(huì)導(dǎo)致當(dāng)前 Unit 停止運(yùn)行
Before:如果該字段指定的 Unit 也要啟動(dòng),那么必須在當(dāng)前 Unit 之后啟動(dòng)
After:如果該字段指定的 Unit 也要啟動(dòng),那么必須在當(dāng)前 Unit 之前啟動(dòng)
Conflicts:這里指定的 Unit 不能與當(dāng)前 Unit 同時(shí)運(yùn)行
Condition...:當(dāng)前 Unit 運(yùn)行必須滿足的條件,否則不會(huì)運(yùn)行
Assert...:當(dāng)前 Unit 運(yùn)行必須滿足的條件,否則會(huì)報(bào)啟動(dòng)失敗

[Service]區(qū)塊用來(lái) Service 的配置,只有 Service 類型的 Unit 才有這個(gè)區(qū)塊。它的主要字段如下。

Type:定義啟動(dòng)時(shí)的進(jìn)程行為。它有以下幾種值。
Type=simple:默認(rèn)值,執(zhí)行ExecStart指定的命令,啟動(dòng)主進(jìn)程
Type=forking:以 fork 方式從父進(jìn)程創(chuàng)建子進(jìn)程,創(chuàng)建后父進(jìn)程會(huì)立即退出
Type=oneshot:一次性進(jìn)程,Systemd 會(huì)等當(dāng)前服務(wù)退出,再繼續(xù)往下執(zhí)行
Type=dbus:當(dāng)前服務(wù)通過(guò)D-Bus啟動(dòng)
Type=notify:當(dāng)前服務(wù)啟動(dòng)完畢,會(huì)通知Systemd,再繼續(xù)往下執(zhí)行
Type=idle:若有其他任務(wù)執(zhí)行完畢,當(dāng)前服務(wù)才會(huì)運(yùn)行
ExecStart:?jiǎn)?dòng)當(dāng)前服務(wù)的命令
ExecStartPre:?jiǎn)?dòng)當(dāng)前服務(wù)之前執(zhí)行的命令
ExecStartPost:?jiǎn)?dòng)當(dāng)前服務(wù)之后執(zhí)行的命令
ExecReload:重啟當(dāng)前服務(wù)時(shí)執(zhí)行的命令
ExecStop:停止當(dāng)前服務(wù)時(shí)執(zhí)行的命令
ExecStopPost:停止當(dāng)其服務(wù)之后執(zhí)行的命令
RestartSec:自動(dòng)重啟當(dāng)前服務(wù)間隔的秒數(shù)
Restart:定義何種情況 Systemd 會(huì)自動(dòng)重啟當(dāng)前服務(wù),可能的值包括always(總是重啟)、on-success、on-failure、on-abnormal、on-abort、on-watchdog
TimeoutSec:定義 Systemd 停止當(dāng)前服務(wù)之前等待的秒數(shù)
Environment:指定環(huán)境變量

[Install]通常是配置文件的最后一個(gè)區(qū)塊,用來(lái)定義如何啟動(dòng),以及是否開(kāi)機(jī)啟動(dòng)。它的主要字段如下。

WantedBy:它的值是一個(gè)或多個(gè) Target,當(dāng)前 Unit 激活時(shí)(enable)符號(hào)鏈接會(huì)放入/etc/systemd/system目錄下面以 Target 名 + .wants后綴構(gòu)成的子目錄中
RequiredBy:它的值是一個(gè)或多個(gè) Target,當(dāng)前 Unit 激活時(shí),符號(hào)鏈接會(huì)放入/etc/systemd/system目錄下面以 Target 名 + .required后綴構(gòu)成的子目錄中
Alias:當(dāng)前 Unit 可用于啟動(dòng)的別名
Also:當(dāng)前 Unit 激活(enable)時(shí),會(huì)被同時(shí)激活的其他 Unit

配置文件的狀態(tài)

systemctl list-unit-files 命令用于列出所有配置文件。

# 列出所有配置文件
$ systemctl list-unit-files

# 列出指定類型的配置文件
$ systemctl list-unit-files --type=service

這個(gè)命令會(huì)輸出一個(gè)列表。

systemctl list-unit-files

UNIT FILE              STATE
chronyd.service        enabled
clamd@.service         static
clamd@scan.service     disabled

這個(gè)列表顯示每個(gè)配置文件的狀態(tài),一共有四種。

enabled:已建立啟動(dòng)鏈接
disabled:沒(méi)建立啟動(dòng)鏈接
static:該配置文件沒(méi)有[Install]部分(無(wú)法執(zhí)行),只能作為其他配置文件的依賴
masked:該配置文件被禁止建立啟動(dòng)鏈接

注意,從配置文件的狀態(tài)無(wú)法看出,該 Unit 是否正在運(yùn)行。這必須執(zhí)行前面提到的 systemctl status 命令。

systemctl status sshd.service

一旦修改配置文件,就要讓 SystemD 重新加載配置文件,然后重新啟動(dòng),否則修改不會(huì)生效。

systemctl daemon-reload
systemctl restart httpd.service

Target

啟動(dòng)計(jì)算機(jī)的時(shí)候,需要啟動(dòng)大量的 Unit。如果每一次啟動(dòng),都要一一寫明本次啟動(dòng)需要哪些 Unit,顯然非常不方便。Systemd 的解決方案就是 Target。

簡(jiǎn)單說(shuō),Target 就是一個(gè) Unit 組,包含許多相關(guān)的 Unit 。啟動(dòng)某個(gè) Target 的時(shí)候,Systemd 就會(huì)啟動(dòng)里面所有的 Unit。從這個(gè)意義上說(shuō),Target 這個(gè)概念類似于”狀態(tài)點(diǎn)”,啟動(dòng)某個(gè) Target 就好比啟動(dòng)到某種狀態(tài)。

傳統(tǒng)的init啟動(dòng)模式里面,有 RunLevel 的概念,跟 Target 的作用很類似。不同的是,RunLevel 是互斥的,不可能多個(gè) RunLevel 同時(shí)啟動(dòng),但是多個(gè) Target 可以同時(shí)啟動(dòng)。

# 查看當(dāng)前系統(tǒng)的所有 Target
systemctl list-unit-files --type=target

# 查看一個(gè) Target 包含的所有 Unit
systemctl list-dependencies multi-user.target

# 查看啟動(dòng)時(shí)的默認(rèn) Target
systemctl get-default

# 設(shè)置啟動(dòng)時(shí)的默認(rèn) Target
systemctl set-default multi-user.target

# 切換 Target 時(shí),默認(rèn)不關(guān)閉前一個(gè) Target 啟動(dòng)的進(jìn)程,systemctl isolate 命令改變這種行為,關(guān)閉前一個(gè) Target 里面所有不屬于后一個(gè) Target 的進(jìn)程
systemctl isolate multi-user.target

Target 與 傳統(tǒng) RunLevel 的對(duì)應(yīng)關(guān)系如下。

Traditional runlevel      New target name     Symbolically linked to...

Runlevel 0           |    runlevel0.target -> poweroff.target
Runlevel 1           |    runlevel1.target -> rescue.target
Runlevel 2           |    runlevel2.target -> multi-user.target
Runlevel 3           |    runlevel3.target -> multi-user.target
Runlevel 4           |    runlevel4.target -> multi-user.target
Runlevel 5           |    runlevel5.target -> graphical.target
Runlevel 6           |    runlevel6.target -> reboot.target

它與init進(jìn)程的主要差別如下。

(1)默認(rèn)的 RunLevel(在/etc/inittab文件設(shè)置)現(xiàn)在被默認(rèn)的 Target 取代,位置是/etc/systemd/system/default.target,通常符號(hào)鏈接到 graphical.target(圖形界面)或者multi-user.target(多用戶命令行)。

(2)啟動(dòng)腳本的位置,以前是/etc/init.d目錄,符號(hào)鏈接到不同的 RunLevel 目錄 (比如/etc/rc3.d、/etc/rc5.d等),現(xiàn)在則存放在/lib/systemd/system和/etc/systemd/system目錄。

(3)配置文件的位置,以前init進(jìn)程的配置文件是/etc/inittab,各種服務(wù)的配置文件存放在/etc/sysconfig目錄?,F(xiàn)在的配置文件主要存放在/lib/systemd目錄,在/etc/systemd目錄里面的修改可以覆蓋原始設(shè)置。

日志管理

Systemd 統(tǒng)一管理所有 Unit 的啟動(dòng)日志。帶來(lái)的好處就是,可以只用 journalctl 一個(gè)命令,查看所有日志(內(nèi)核日志和應(yīng)用日志)。日志的配置文件是 /etc/systemd/journald.conf。

journalctl 功能強(qiáng)大,用法非常多。

# 查看所有日志(默認(rèn)情況下,只保存本次啟動(dòng)的日志)
journalctl

# 查看內(nèi)核日志(不顯示應(yīng)用日志)
journalctl -k

# 查看系統(tǒng)本次啟動(dòng)的日志
journalctl -b
journalctl -b -0

# 查看上一次啟動(dòng)的日志(需更改設(shè)置)
journalctl -b -1

# 查看指定時(shí)間的日志
journalctl --since="2012-10-30 18:17:16"
journalctl --since "20 min ago"
journalctl --since yesterday
journalctl --since "2015-01-10" --until "2015-01-11 03:00"
journalctl --since 09:00 --until "1 hour ago"

# 顯示尾部的最新10行日志
journalctl -n

# 顯示尾部指定行數(shù)的日志
journalctl -n 20

# 實(shí)時(shí)滾動(dòng)顯示最新日志
journalctl -f

# 查看指定服務(wù)的日志
journalctl /usr/lib/systemd/systemd

# 查看指定進(jìn)程的日志
journalctl _PID=1

# 查看某個(gè)路徑的腳本的日志
$ sudo journalctl /usr/bin/bash

# 查看指定用戶的日志
journalctl _UID=33 --since today

# 查看某個(gè) Unit 的日志
journalctl -u nginx.service
journalctl -u nginx.service --since today

# 實(shí)時(shí)滾動(dòng)顯示某個(gè) Unit 的最新日志
journalctl -u nginx.service -f

# 合并顯示多個(gè) Unit 的日志
$ journalctl -u nginx.service -u php-fpm.service --since today

# 查看指定優(yōu)先級(jí)(及其以上級(jí)別)的日志,共有 8 級(jí)
# 0: emerg
# 1: alert
# 2: crit
# 3: err
# 4: warning
# 5: notice
# 6: info
# 7: debug

journalctl -p err -b

# 日志默認(rèn)分頁(yè)輸出,--no-pager 改為正常的標(biāo)準(zhǔn)輸出
journalctl --no-pager

# 以 JSON 格式(單行)輸出
journalctl -b -u nginx.service -o json

# 以 JSON 格式(多行)輸出,可讀性更好
journalctl -b -u nginx.serviceqq -o json-pretty

# 顯示日志占據(jù)的硬盤空間
journalctl --disk-usage

# 指定日志文件占據(jù)的最大空間
journalctl --vacuum-size=1G

# 指定日志文件保存多久
journalctl --vacuum-time=1years

感謝各位的閱讀,以上就是“Linux的systemctl命令怎么使用”的內(nèi)容了,經(jīng)過(guò)本文的學(xué)習(xí)后,相信大家對(duì)Linux的systemctl命令怎么使用這一問(wèn)題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是億速云,小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI