一、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 檔案中的配置資訊決定的。