筆者在前文中概要的介紹了 systemd 的基本概念和主要特點。由于 systemd 相關(guān)的絕大多數(shù)任務(wù)都是通過 systemctl 命令管理的,所以本文將集中的介紹 systemctl 命令的用法。注意,本文以 ubuntu 16.04 進行介紹,文中所有的 demo 都在 ubuntu 16.04 中完成。
systemctl 命令有兩大類功能:
在介紹這些功能前讓我們先來熱個身,了解些 systemctl 命令自身相關(guān)的信息。
檢查 systemd 的版本
$ systemctl --version
查看 systemd 和 systemctl 程序相關(guān)的目錄
$ whereis systemd $ whereis systemctl
確認(rèn) 1 號進程
作為 init 系統(tǒng),systemd 進程作為系統(tǒng)中的 1 號進程應(yīng)該是毋庸置疑的,讓我們搜索與 systemd 相關(guān)的進程:
結(jié)果讓人有點不敢相信自己的眼睛,我們搜到了好幾個與 systemd 相關(guān)的進程,但是卻沒有 1 號進程。讓我們看看 1 號進程是誰:
/sbin/init 是什么?
好吧,/sbin/init 只是到 /lib/systemd/systemd 的鏈接文件,系統(tǒng)的 1 號進程的確是 systemd,只不過在 ubuntu 系統(tǒng)中被起了個別名叫 /sbin/init。
systemctl 提供了一組子命令來管理單個的 unit,其命令格式為:
systemctl [command] [unit]
command 主要有:
start:立刻啟動后面接的 unit。
stop:立刻關(guān)閉后面接的 unit。
restart:立刻關(guān)閉后啟動后面接的 unit,亦即執(zhí)行 stop 再 start 的意思。
reload:不關(guān)閉 unit 的情況下,重新載入配置文件,讓設(shè)置生效。
enable:設(shè)置下次開機時,后面接的 unit 會被啟動。
disable:設(shè)置下次開機時,后面接的 unit 不會被啟動。
status:目前后面接的這個 unit 的狀態(tài),會列出有沒有正在執(zhí)行、開機時是否啟動等信息。
is-active:目前有沒有正在運行中。
is-enable:開機時有沒有默認(rèn)要啟用這個 unit。
kill :不要被 kill 這個名字嚇著了,它其實是向運行 unit 的進程發(fā)送信號。
show:列出 unit 的配置。
mask:注銷 unit,注銷后你就無法啟動這個 unit 了。
unmask:取消對 unit 的注銷。
我們先通過 prometheus.service 來觀察服務(wù)類型 unit 的基本信息:
輸出內(nèi)容的第一行是對 unit 的基本描述。
第二行中的 Loaded 描述操作系統(tǒng)啟動時會不會啟動這個服務(wù),enabled 表示開機時啟動,disabled 表示開機時不啟動。而啟動該服務(wù)的配置文件路徑為:/lib/systemd/system/prometheus.service。
第三行 中的 Active 描述服務(wù)當(dāng)前的狀態(tài),active (running) 表示服務(wù)正在運行中。如果是 inactive (dead) 則表示服務(wù)當(dāng)前沒有運行。后面則是服務(wù)的啟動時間。
第四行的 Docs 提供了在線文檔的地址。
下面的 Main PID 表示進程的 ID,接下來是任務(wù)的數(shù)量,占用的內(nèi)存和 CPU 資源。
再下面的 Cgroup 描述的是 cgrpup 相關(guān)的信息,筆者會在后續(xù)的文章中詳細(xì)的介紹。
最后是輸出的日志信息。
關(guān)于 unit 的啟動狀態(tài),除了 enable 和 disable 之外還有: