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 文件中的配置信息決定的。


分享到:


相關文章: