一、Systemd簡介
Systemd是由紅帽公司的一名叫做Lennart Poettering的員工開發,systemd是Linux系統中最新的初始化系統(init),它主要的設計目的是克服Sys V 固有的缺點,提高系統的啟動速度,systemd和upstart是競爭對手,ubantu上使用的是upstart的啟動方式,centos7上使用systemd替換了Sys V,Systemd目錄是要取代Unix時代依賴一直在使用的init系統,兼容SysV和LSB的啟動腳本,而且能夠在進程啟動中更有效地引導加載服務。
system:系統啟動和服務器守護進程管理器,負責在系統啟動或運行時,激活系統資源,服務器進程和其他進程,根據管理,字母d是守護進程(daemon)的縮寫,systemd這個名字的含義就是它要守護整個系統。
二、Systemd新特性
- 系統引導時實現服務并行啟動
- 按需啟動守護進程
- 自動化的服務依賴關系管理
- 同時采用socket式與D-Bus總線式激活服務
- 系統狀態快照和恢復
- 利用Linux的cgroups監視進程
- 維護掛載點和自動掛載點
- 各服務間基于依賴關系進行精密控制
三、Systemd核心概念
Unit
表示不同類型的sytemd對象,通過配置文件進行標識和配置,文件中主要包含了系統服務,監聽socket、保存的系統快照以及其他與init相關的信息
配置文件:
/usr/lib/systemd/system:
每個服務最主要的啟動腳本設置,類似于之前的/etc/initd.d
/run/system/system
系統執行過程中所產生的服務腳本,比上面的目錄優先運行
/etc/system/system
管理員建立的執行腳本,類似于/etc/rc.d/rcN.d/Sxx類的功能,比上面目錄優先運行,在三者之中,此目錄優先級最高
四、Unit類型
systemctl -t help :查看unit類型
service unit:文件擴展名為.service,用于定義系統服務
target unit:文件擴展名為.target,用于模擬實現“運行級別”
device unit: .device,用于定義內核識別的設備
mount unit :.mount,定義文件系統掛載點
socket unit :.socket,用于標識進程間通信用的socket文件,也可以在系統啟動時,延遲啟動服務,實現按需啟動
snapshot unit:.snapshot,關系系統快照
swap unit:.swap,用于表示swap設備
automount unit:.automount,文件系統的自動掛載點如:/misc目錄
path unit:.path,用于定義文件系統中的一個文件或目錄使用,常用于當文件系統變化時,延遲激活服務,如spool目錄
time:.timer由systemd管理的計時器
注:使用systemctl控制單元時,通常需要使用單元文件的全名,包括擴展名,但是有些單元可以在systemctl中使用簡寫方式,如果無擴展名,systemctl默認把擴展名當做.service。例如netcfg和netcfg.service是等同的掛載點會自動轉化為相應的.mount單元,例如/home等價于home.mount設備會自動轉化為相應的.device單元,所以/dev/sd2等價于dev-sda2.device
五、關鍵特性
- 基于socket的激活機制:socket與服務進程分離
- 基于D-Bus的激活機制
- 基于device的激活機制
- 基于path的激活機制
- 系統快照:保存各unit的當前狀態信息于持久存儲設備中想后兼容sysv init腳本
六、不兼容
systemctl命令固定不變,不可擴展
非由systemd啟動的服務,systemctl無語與之通信和控制,如:使用之前sys v風格管理的進程就無法收systemd控制
七、Systemd基本工具
監視和控制systemd的主要命令是systemctl。該命令可用于查看系統狀態和管理系統及服務。
管理服務
命令:systemctl command name.service
啟動:service name start –>systemctl start name.service
停止:service name stop –>systemctl stop name.service
重啟:service name restart–>systemctl restart name.service
狀態:service name status–>systemctl status name.service
條件式重啟(已啟動才重啟,否則不做任何操作)
systemctl try-restart name.service
重載或重啟服務(先加載,然后再啟動)
systemctl reload-or-try-restart name.service
禁止自動和手動啟動
systemctl mask name.service
執行此條命令實則創建了一個鏈接
ln -s '/dev/null' '/etc/systemd/system/sshd.service'
取消禁止
systemctl unmask name.service
刪除此前創建的鏈接
服務查看(查看某服務當前激活與否的狀態)
systemctl is-active name.service
如果啟動會顯示active,否則會顯示unknown
查看所有已經激活的服務
systemctl list-units –t service
設定某服務開機啟動
systemctl enable name.service
設定某服務開機禁止啟動
systemctl disable name.service
查看服務是否開機自啟
systemctl is-enabled name.servcice
查看服務的依賴關系
systemctl list-dependencies
查看啟動失敗的服務
systemctl --failed -t service
查看服務單元的啟用和禁用狀態
systemctl list-unit-files –t=service
殺死進程
systemctl kill 進程名
查看服務是否開機自啟
systemctl is-enabled name.servcice
查看開機啟動項
systemctl list-unit-files | grep enable
為服務添加開機啟動項
systemctl enable name.service
移除開機啟動項的服務
systemctl disable name.service
查找所有或者某個服務
systemctl list-units --type=service
服務狀態
- systemctl list-units -t service -a 顯示狀態
- loaded:unit配置文件已處理
- active(running):一次或多次持續處理的運行
- active(exited):成功完成一次性的配置
- active(waiting):運行中,等待一個事件
- inactive:不運行
- enabled:開機啟動
- disabled:開機不啟動
- static:開機不啟動,但可以被另一個啟用的服務激活