1. 程式人生 > >CentOS 7中的Systemd及Systemctl

CentOS 7中的Systemd及Systemctl

1、Systemd的新特性

(1)系統引導時實現服務並行啟動;
(2)按需啟用程序;
(3)系統狀態快照;
(4)基於依賴關係定義服務控制邏輯;
Systemd的關鍵特性:
基於socket的啟用機制:socket與程式分離;
基於bus的啟用機制;
基於device的啟用機制;
基於Path的啟用機制;
基於系統快照:儲存各unit的當前狀態資訊於持久儲存裝置中;
向後相容sysv init指令碼,在/etc/init.d/目錄下;
不相容:systemctl的命令是固定不變的,非由systemd啟動的服務,systemctl無法與之通訊。

2、核心概念:unit

unit由其相關配置檔案進行標識、識別和配置,檔案中主要包含了系統服務、監聽的socket、儲存的快照以及其它與init相關的資訊,這些配置檔案主要儲存在:
/usr/lib/systemd/system、/run/systemd/system和/etc/systemd/system中。
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, 用於定義檔案系統中的一檔案或目錄;

3、管理系統服務

系統服務:CentOS 7中service型別的unit檔案;
(1)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.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
(2)管理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
級別切換: 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
CentOS6:修改/etc/inittab檔案中的執行級別
切換至緊急救援模式: systemctl rescue
切換至emergency模式: systemctl emergency
(3)其它常用命令
關機: systemctl halt, systemctl poweroff
重啟: systemctl reboot
掛起: systemctl suspend
快照: systemctl hibernate
快照並掛起: systemctl hybrid-sleep
(4)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過載此配置檔案:# systemctl daemon-reload