systemd的新特性(centos 7)
系統引導時實現服務并行啟動
按需激活進程,在此之前可以讓進程處于半活動狀態
系統狀態快照:能夠自我保存當前系統上沒一個用戶空間的進程運行狀態快照,將來可以迅速恢復到某一種狀態,因此用戶空間有了時間機器??梢曰貪L到過去某一時刻的狀態
內在的基于依賴關系定義的服務控制邏輯
對與systemd來講,引入了一個新的核心概念,叫做unit(單元)
核心概念:unit
unit由其相關的配置文件標識、識別和配置:意思就是每一個unit到底定義了與否主要就看他有沒有配置文件。這中文件中主要包含了系統服務、監聽的端口。保存的快照以及其他與init相關的信息;因此他們就分成了這樣幾種類別;系統服務類unit、監聽端口類unit、快照類的unit以及其他的unit,而這些配置文件主要保存在;
/usr/lib/systemd/system
/run/systemd/system
/etc/systemd/system
所以說這些目錄中的每一個文件都成為unit文件,我們進入到這些目錄中可以看到許多文件,以文件的后綴名就可以進行識別,以.service結尾的文件為服務類的unit、以.target結尾的文件為目標類的unit、以.socket結尾的文件為監聽端口類的unit…;常用的類別如下;
unit的常見類型:
service unit:
文件擴展名為.service,主要用于定義系統服務;所以他類似我們之前使用service httpd {start|restart|status|stup}等相關操作的一些服務腳本,所以他扮演了以前由/etc/inin.d下的服務腳本所扮演的角色。所以說systemctl啟動一個服務的時候主要就是靠這個目錄下以.service結尾的unit配置文件,這個文件比此前/etc/init.d下的腳本寫起來要容易的多
target unit:
文件擴展名為.target,主要用于模擬實現“運行進別”;起始對與systemd而言沒有運行級別一說,他的管理法則與sysV和upstart完全是兩回事。
device unit:
文件擴展名為.device,主要用于定義內核識別的設備;一次systemd也能夠實現對/dev目錄下硬件進行識別
mount unit:
文件擴展名為.mount,主要用于定義文件系統掛載點
socket unit:
文件擴展名為.socket,主要用于標識進程間通訊用到的socket文件;我們知道某一個服務啟動并監聽在某套件字上時就需要先創建一個套接字文件,而這些就是由socket unit來負責管理的。
snapshot unit:
文件擴展名為.snapshot,主要用于管理系統快照
swap unit:
文件擴展名為.swap,主要用于標識、管理swap設備
automount unit:
文件擴展名為.automount,主要用于文件系統的自動掛載點設置
path unit:
文件擴展名為.path,主要用于定義文件系統中的一個文件或目錄;他能夠監控指定特定路徑下的文件或目錄,如果該目錄或文件不存在systemd會自動創建之
關鍵特性:
基于socket的激活機制:
也就意味著socket與程序是分離的;我們可以在某個服務啟動時先把socket分配給它,但是這個進程可以先不啟動。
基于bus的激活機制;
如果總線上存在對某個服務的訪問,就基于總線的請求將其激活
基于device的激活機制;
當某個設備插入的時候,它能夠自動去激活mount unit、device unit、automount unit.他能夠監控當前系統上或內核中所輸出的硬件信息,一旦發現某一硬件來了, 就先創建設備文件,再將其自動掛載至某掛載點,如果掛載點不存在還能自動創建。
基于path的激活機制
系統可以監控某個目錄或文件在不在,如何某個文件在了就能立刻激活某一個服務,或者能激活另外一個進程。比方說萬一某一個進程在運行當中遇到bug崩潰了, 崩潰的時候創建了一個log文件,一旦systemd發現了這個文件就立即去激活一個額外的程序去檢測,例如激活一個窗口去提醒用戶。
系統快照:
他的好處在于保存各unit的當前狀態,因為systemd的所有管理功能都是通過unit來實現的,因此他能保存各unit的當前狀態信息于持久存儲設備中; 所以將來如果需要回到某一時刻的時候就可以回滾,讓用戶可在過去與現在之間游走。
向后兼容sysV init腳本;
這就意味著放在/etc/init.d/下的服務腳本,也一樣能夠靠systemd來啟動控制,但是他也有不兼容的內容; 不兼容: systemctl的命令是固定不變的; 非由systemd啟動的服務,systemctl無法與之通信,也就意味著無法控制此服務。
如何管理系統服務;
centos 7:系統服務主要是靠service類型的unit文件來實現管控的,而且兼容/etc/init.d/下的給類型服務腳本 systemctl命令 systemctl [options...] command [name...] 啟動: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 條件式重啟:service name condrestart ==> systemctl try-restart name.service 重載或重啟服務:systemctl reload-or-restart name.service 重載或條件式重啟服務:systemctl reload-or-try-restart name.service 查看某服務當前激活與否的狀態:systemctl is-active name.service 查看所有已激活的服務:systemctl list-units --type service 查看所有服務(已激活及未激活):chkconfig --list ==> systemctl list-units -t service --all 設置服務開機自啟:chkconfig name on ==> systemctl enable name.service 禁止服務開機自啟:chkconfig name off ==> systemctl disable name.service 查看某服務是否能夠開機自啟:chkconfig --list name ==> systemctl is-enabled name.service 禁止某服務設定為開機自啟和手動啟動:systemctl mask name.service 取消此禁止:systemctl unmask name.service 查看服務的依賴關系:systemctl list-dependencies name.service
如何管理target unit:
運行級別:
0 ==> runlevel0.target,poweroff.target:關機 1 ==> runlevel1.target,rescue.target:單用戶級別(救援模式) 2 ==> runlevel2.target,multi-user.target:多用戶模式 3 ==> runlevel3.target,multi-user.target:多用戶模式 4 ==> runlevel4.target,multi-user.target:多用戶模式 5 ==> runlevel5.target,graphical.target:圖形界面 6 ==> runlevel6.target,reboot.target:重啟
級別切換:
init N ==> systemctl isolate name.target
查看當前運行級別:
runlevel ==> systemctl list-unit --type target
查看所有級別:
systemctl list-units -t target -a
獲取默認運行級別:
systemctl get-default
修改默認運行級別:
systemctl set-default name.target
切換至緊急救援模式:
systemctl rescue
切換至emergency(緊急)模式:(不裝載設備驅動,也不啟動/etc/init.d/下的系統設定腳本)
systemctl emetgency
其他常用命令
關機:systemctl halt,systemctl poweroff 重啟:systemctl reboot 掛起:systemctl suspend 快照:systemctl hibernate 快照并掛起:systemctl hybrid-sleep
/usr/lib/systemd/system和/etc/systemd/system/的聯系
所謂獲取默認運行級別或者設定默認運行級別就是把/etc/systemd/system/目錄下的文件向對應的連接修改了而已. 他們是用于設定運行級別以及每一個級別下啟動的服務和服務之間的依賴關系的
service unit文件是如何組織的
service unit file:
以httpd為例;(這里vim打開httpd.service文件為例) 此文件通常由三段配置組成;unit,service,install
unit:定義與unit類型無關的通用選項;用于提供unit的描述信息,unit行為及依賴關系等
service:與特點類型相關的專用選項:此處為service類型
install:定義由"systemctl enable"以及"systemctl disable"命令在是實現服務啟用或禁用時用到的一些選項
unit段的常用選項
Descrription:描述信息;意義性描述 After:定義unit的啟動次序;表示當前unit應該晚于哪些unit啟動;其功能與Before相反 Requies:依賴到的其他units;強依賴,被依賴到的units無法激活時,當前units即無法激活 Wants:指明依賴到的其他unit;弱依賴,被依賴到的units無法激活時,不影響當前units的激活 Conflicts:定義units間的沖突關系
service段的常用選項:
Type:用于定義影響ExecStart及相關參數的功能的unit進程啟動類型; 類型: simple:表示Execstart指明的程序所啟動的進程是一個主進程 foeking:表示由Execstart指明的程序所啟動的進程生成的一個子進程將成為主進程 oneshot:功能類似與simple,不過在啟動后續units之前主進程將會退出. dbus:功能也類似與simple,但是后續的units盡在主進程得到dbus名稱之后才能啟動 notify:類似與simple,它表示后續的units僅在通過sdnotify函數發送通知以后,才能運行這個命令. idle:類似與simple Environmentfile:環境配置文件,此文件會在Execstart之前被讀取,并為Execstart提供一些變量等自定義功能 Execstart:指明啟動unit要運行的命令或腳本;ExecStartpre,ExecStartpost ExecStop:指明停止unit要運行的命令腳本 Restart:表示啟動了此項會導致進程退出后重啟相關服務的;意思就是進程如果以外終止了,他會自動將其重新啟動起來
Install段的常用選項:
Alias:表示當前unit的別名 RequiredBy:被哪些units所依賴 WantedBy:被哪些units所依賴
注意:對于新創建的unit文件或修改了的unit文件,要通知systemd重載此配置文件;命令如下;
# systemctl daemon-reload
原創文章,作者:M20-1馬星,如若轉載,請注明出處:http://www.www58058.com/48727
總結的很好,通讀下來能學到很多東西,受教了。