一、systemctl理解
linux 服務管理兩種方式service和systemctl
systemd是Linux系統最新的初始化系統(init),作用是提高系統的啟動速度,盡可能啟動較少的進程,盡可能更多進程并發啟動。
systemd對應的進程管理命令是systemctl
1. systemctl命令兼容了service
即systemctl也會去/etc/init.d目錄下,查看,執行相關程序
2. systemctl命令管理systemd的資源Unit
systemd的Unit放在目錄/usr/lib/systemd/system(centos)或/etc/systemd/system(Ubuntu)
主要有四種類型文件.mount,.service,.target,.wants
.mount文件
.mount文件定義了一個掛載點,[Mount]節點里配置了What,Where,Type三個數據項
等同于以下命令:
mount -t hugetlbfs /dev/hugepages hugetlbfs
.service文件
.service文件定義了一個服務,分為[Unit],[Service],[Install]三個小節
[Unit]
Description:描述,
After:在network.target,auditd.service啟動后才啟動
ConditionPathExists: 執行條件
[Service]
EnvironmentFile:變量所在文件
ExecStart: 執行啟動腳本
Restart: fail時重啟
[Install]
Alias:服務別名
WangtedBy: 多用戶模式下需要的
.target文件
.target定義了一些基礎的組件,供.service文件調用
.wants文件
.wants文件定義了要執行的文件集合,每次執行,.wants文件夾里面的文件都會執行
二、常用命令
1.查看版本號
systemctl –-version
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 的基本信息:
輸出內容的第一行是對 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
所謂的 enable 就是在 multi-user.target.wants 下面創建了一個鏈接文件:
至于為什么會鏈接到 multi-user.target.wants 目錄下,則是由 etcd.server 文件中的配置信息決定的。