linux中systemctl詳細理解及常用命令

一、systemctl理解

Linux 服務管理兩種方式service和systemctl

systemd是Linux系統最新的初始化系統(init),作用是提高系統的啟動速度,儘可能啟動較少的程序,儘可能更多程序併發啟動。

systemd對應的程序管理命令是systemctl

1。 systemctl命令相容了service

即systemctl也會去/etc/init。d目錄下,檢視,執行相關程式

linux中systemctl詳細理解及常用命令

2。 systemctl命令管理systemd的資源Unit

systemd的Unit放在目錄/usr/lib/systemd/system(Centos)或/etc/systemd/system(Ubuntu)

linux中systemctl詳細理解及常用命令

主要有四種類型檔案。mount,。service,。target,。wants

linux中systemctl詳細理解及常用命令

。mount檔案

。mount檔案定義了一個掛載點,[Mount]節點裡配置了What,Where,Type三個資料項

等同於以下命令:

mount -t hugetlbfs /dev/hugepages hugetlbfs

。service檔案

linux中systemctl詳細理解及常用命令

。service檔案定義了一個服務,分為[Unit],[Service],[Install]三個小節

[Unit]

Description:描述,

After:在network。target,auditd。service啟動後才啟動

ConditionPathExists: 執行條件

[Service]

EnvironmentFile:變數所在檔案

ExecStart: 執行啟動指令碼

Restart: fail時重啟

[Install]

Alias:服務別名

WangtedBy: 多使用者模式下需要的

。target檔案

linux中systemctl詳細理解及常用命令

。target定義了一些基礎的元件,供。service檔案呼叫

。wants檔案

linux中systemctl詳細理解及常用命令

。wants檔案定義了要執行的檔案集合,每次執行,。wants資料夾裡面的檔案都會執行

二、常用命令

1。檢視版本號

systemctl –-version

linux中systemctl詳細理解及常用命令

2。管理服務(unit)

systemctl 提供了一組子命令來管理單個的 unit,其命令格式為:

systemctl [command] [unit]

command 主要有:

start:立刻啟動後面接的 unit。

stop:立刻關閉後面接的 unit。

restart:立刻關閉後啟動後面接的 unit,亦即執行 stop 再 start 的意思。

reload:不關閉 unit 的情況下,重新載入配置檔案,讓設定生效。

enable:設定下次開機時,後面接的 unit 會被啟動。

disable:設定下次開機時,後面接的 unit 不會被啟動。

status:目前後面接的這個 unit 的狀態,會列出有沒有正在執行、開機時是否啟動等資訊。

is-active:目前有沒有正在執行中。

is-enable:開機時有沒有預設要啟用這個 unit。

kill :不要被 kill 這個名字嚇著了,它其實是向執行 unit 的程序傳送訊號。

show:列出 unit 的配置。

mask:登出 unit,登出後你就無法啟動這個 unit 了。

unmask:取消對 unit 的登出。

我們先透過 etcd。service 來觀察服務型別 unit 的基本資訊:

linux中systemctl詳細理解及常用命令

輸出內容的第一行是對 unit 的基本描述。

第二行中的 Loaded 描述作業系統啟動時會不會啟動這個服務,enabled 表示開機時啟動,disabled 表示開機時不啟動。而啟動該服務的配置檔案路徑為:/lib/systemd/system/etcd。service。

第三行 中的 Active 描述服務當前的狀態,active (running) 表示服務正在執行中。如果是 inactive (dead) 則表示服務當前沒有執行。後面則是服務的啟動時間。

第四行的 Docs 提供了線上文件的地址。

下面的 Main PID 表示程序的 ID,接下來是任務的數量,佔用的記憶體和 CPU 資源。

再下面的 Cgroup 描述的是 cgrpup 相關的資訊,筆者會在後續的文章中詳細的介紹。

最後是輸出的日誌資訊。

關於 unit 的啟動狀態,除了 enable 和 disable 之外還有:

static:這個 unit 不可以自己啟動,不過可能會被其它的 enabled 的服務來喚醒。

mask:這個 unit 無論如何都無法被啟動!因為已經被強制登出。可透過 systemctl unmask 改回原來的狀態。

關於 unit 的執行狀態 Active,除了 active 和 inactive 之外還有:

active (exited):僅執行一次就正常結束的服務,目前並沒有任何程式在系統中執行。舉例來說,開機或者是掛載時才會進行一次的 quotaon 功能,就是這種模式! Quotaon 不需要一直執行,只在執行一次之後,就交給檔案系統去自行處理。通常用 bash shell 寫的小型服務,大多是屬於這種型別。

active (waiting):正在執行當中,不過還再等待其他的事件才能繼續處理。舉例來說,列印的相關服務就是這種狀態。

enable 和 disable 操作

比如我們為 etcd 服務建立了配置檔案 /lib/systemd/system/etcd。service,然後執行 enable 命令:

systemctl enable etcd。service

linux中systemctl詳細理解及常用命令

所謂的 enable 就是在 multi-user。target。wants 下面建立了一個連結檔案:

linux中systemctl詳細理解及常用命令

至於為什麼會連結到 multi-user。target。wants 目錄下,則是由 etcd。server 檔案中的配置資訊決定的。