Sysmtedcentos
systemd是什麼?網絡
你們知道當內核完成初始化,以只讀方式掛載rootfs之後,運行了用戶空間的第一個進程叫init,咱們以centos系列爲視角來看看:socket
CentOS 5: SysV initide
CentOS 6:Upstartui
CentOS 7:Systemdspa
Systemd的新特性:hibernate
系統引導時實現服務並行啓動;rest
按需激活進程;注:訪問時候才激活進程orm
系統狀態快照;進程
基於依賴關係定義服務控制邏輯;
核心概念:unit
unit是什麼?
Unit 文件統一了過去各類不一樣的系統資源配置格式,例如服務的啓/停、定時任務、設備自動掛載、網絡配置、設備配置、虛擬內存配置等。而 Systemd 經過不一樣的經過文件的後綴名來區分這些配置文件,.service 文件即是其中的一種。
文件中主要包含了系統服務、監聽的socket、保存的快照以及其它與init相關的信息; 這些配置文件主要保存在:
/usr/lib/systemd/system 注:系統或用戶提供的配置文件
/run/systemd/system 注:軟件運行時生成的配置文件
/etc/systemd/system 注:系統或第三方軟件安裝時添加的配置文件
下面是 Systemd 所支持的12種 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,文件系統自動點設備;
Path unit: .path, 用於定義文件系統中的一文件或目錄;
關鍵特性:
基於socket的激活機制:socket與程序分離;
基於bus的激活機制;
基於device的激活機制;
基於Path的激活機制;
系統快照:保存各unit的當前狀態信息於持久存儲設備中;
向後兼容sysv init腳本; /etc/init.d/
不兼容:
systemctl的命令是固定不變的;
非由systemd啓動的服務,systemctl沒法與之通訊;
service類型的unit文件命令---syscemctl
用法:
syscemctl命令:systemctl [OPTIONS...] COMMAND [NAME...]
centos6和7服務啓動關閉對比
一、條件式重啓:service NAME condrestart ==> systemctl try-restart NAME.service
二、重載或重啓服務: systemctl reload-or-restart NAME.servcie
三、重載或條件式重啓服務:systemctl reload-or-try-restart NAME.service
四、查看某服務當前激活與否的狀態: systemctl is-active NAME.service
五、查看全部已激活的服務:systemctl list-units --type service
六、查看全部服務(已激活及未激活): chkconfig --lsit ==> 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.servcie
十二、查看服務的依賴關係:systemctl list-dependencies NAME.service
剖析service unit file:
文件一般由三部分組成:
[Unit]: 定義與Unit類型無關的通用選項;用於提供unit的描述信息、unit行爲及依賴關係等;
[Service]:與特定類型相關的專用選項;此處爲Service類型;
[Install]:定義由「systemctl enable」以及"systemctl disable「命令在實現服務 啓用或禁用時用到的一些選項;
Unit段的經常使用選項:
Description:描述信息; 意義性描述;
After:定義unit的啓動次序;表示當前unit應該晚於哪些unit啓動;其功能與Before相反;
Requies:依賴到的其它units;強依賴,被依賴的units沒法激活時,當前unit即沒法激活;
Wants:依賴到的其它units;弱依賴;
Conflicts:定義units間的衝突關係;
Service段的經常使用選項:
Type:用於定義影響ExecStart及相關參數的功能的unit進程啓動類型;
simple:
forking:
oneshot:
dbus:
notify:
idle:
EnvironmentFile:環境配置文件;
ExecStart:指明啓動unit要運行命令或腳本; ExecStartPre, ExecStartPost
ExecStop:指明中止unit要運行的命令或腳本;
Restart:
Install段的經常使用選項:
Alias:
RequiredBy:被哪些units所依賴;
WantedBy:被哪些units所依賴;
注意:對於新建立的unit文件或,修改了的unit文件,要通知systemd重載此配置文件;
管理target units:
運行級別:
0 ==> runlevel0.target, poweroff.target
1 ==> runlevel1.target, rescue.target
2 ==> runlevel2.tartet, multi-user.target
3 ==> runlevel3.tartet, multi-user.target
4 ==> runlevel4.tartet, multi-user.target
5 ==> runlevel5.target, graphical.target
6 ==> runlevel6.target, reboot.target
centos6和7運行級別切換對比
一、級別切換: init N ==> systemctl isolate NAME.target
二、查看級別: runlevel ==> systemctl list-units --type target
三、查看全部級別: systemctl list-units -t target -a
四、獲取默認運行級別:systemctl get-default
五、修改默認運行級別: systemctl set-default NAME.target
六、切換至緊急救援模式: systemctl rescue
七、切換至emergency模式: systemctl emergency
其它經常使用命令:
關機: systemctl halt, systemctl poweroff
重啓: systemctl reboot
掛起: systemctl suspend
快照: systemctl hibernate
快照並掛起: systemctl hybrid-sleep
# systemctl daemon-reload
練習:爲當前系統的httpd服務提供一個unit文件;