前言
最近工作關係開始玩 CentOS 了,本次實作環境中採用的是 CentOS 7.3 x86-64 (Kernel version 3.10.0-514.el7.x86_64)映像檔,也就是新版 CentOS 7.3最小化安裝版本 (Minimal Install),那麼開始來玩玩吧。💪實作環境
Systemd 是什麼?
簡單來說,從 CentOS 7版本開始在管理系統的部分,已經從過往傳統的 Runlevel (/etc/rc.d/init.d)改為新一代的 systemd (/etc/systemd/system)。因此,倘若查看舊有 Runlevel 組態設定檔 (/etc/inittab)內容會發現是空的 (詳細資訊請參考 RHEL 7 System Administrator Guide - Chapter 9. Managing Services with systemd)。圖、systemd 系統運作架構示意圖
圖片來源: systemd - Wikipedia
CentOS 7 開機程序
談到 CentOS 的 Systemd啟動模式等級,便要先了解一下整個 CentOS 開機過程。透過下列的開機流程說明,便會了解到在 Systemd 啟動模式,為何能夠掌控系統後半段開機階段的相關服務啟動及關閉。下列開機流程是以安裝於 x86 硬體上的 CentOS 系統進行說明 (詳細資訊請參考 Overview of systemd for RHEL 7 - Red Hat Customer Portal):- 從 BIOS 所選的媒體裝置 (例如,本機硬碟) 載入 Boot Loader (RHEL 7 / CentOS 7 採用 GRUB2)。
- 啟動 Kernel 及 Initial RAM Disk。
- Systemd執行程序初始化系統並啟動所有系統服務 (讀取 default.target內容)。
- Multi-User Mode (/lib/systemd/system/multi-user.target) 裡面有一行 Requires=basic.target 內容,表示系統將會載入 Basic.traget (載入 RHEL7 System)。
- Basic.traget (/usr/lib/systemd/system/basic.target) 裡面有一行 Requires=sysinit.target 內容,表示系統將會載入 Sysinit.traget (載入 System Initialization Services)。
- Sysinit.target (/usr/lib/systemd/system/sysinit.target) 裡面有一行 Wants=local-fs.target swap.target 內容,表示將會載入 local-fs.target swap.target (執行 Mounting File Systems 及 Enabling Swap Devices)。此外,還會處理 enable logging、set kernel options、start the udevd daemon to detect hardware、allow file system decryption、iSCSI、multipath、LVM monitoring、RAID services。
- local-fs.target (/usr/lib/systemd/system/local-fs.target) 裡面有一行 After=local-fs-pre.target 內容,表示等 local-fs-pre.target完成後才載入。
Systemd 啟動模式等級
本文實作環境採用 CentOS 7.3 Minimal Install,預設情況下便會採用「Multi-User Mode」(類似舊有的 Runlevel 3運作環境)。你可以透過查看「/etc/systemd/system/default.target」內容,或者執行「systemctl get-default」指令即可查詢,目前 CentOS 主機的啟動模式等級。# ls -l /etc/systemd/system/default.target
lrwxrwxrwx. 1 root root 37 May 19 16:28 /etc/systemd/system/default.target -> /lib/systemd/system/multi-user.target
# systemctl get-default
multi-user.target
接著,我們可以透過查看「/etc/systemd/system/multi-user.target.wants」內容,或「systemctl list-units --type service |grep running」指令了解 Multi-User Mode 的運作模式預設會啟用哪些系統服務。
# ls -l /etc/systemd/system/multi-user.target.wants
total 0
lrwxrwxrwx. 1 root root 38 May 19 16:25 auditd.service -> /usr/lib/systemd/system/auditd.service
lrwxrwxrwx. 1 root root 37 May 19 16:24 crond.service -> /usr/lib/systemd/system/crond.service
lrwxrwxrwx. 1 root root 47 May 19 17:22 hv_fcopy_daemon.service -> /usr/lib/systemd/system/hv_fcopy_daemon.service
lrwxrwxrwx. 1 root root 45 May 19 17:22 hv_kvp_daemon.service -> /usr/lib/systemd/system/hv_kvp_daemon.service
lrwxrwxrwx. 1 root root 45 May 19 17:22 hv_vss_daemon.service -> /usr/lib/systemd/system/hv_vss_daemon.service
lrwxrwxrwx. 1 root root 42 May 19 16:25 irqbalance.service -> /usr/lib/systemd/system/irqbalance.service
lrwxrwxrwx. 1 root root 37 May 19 16:25 kdump.service -> /usr/lib/systemd/system/kdump.service
lrwxrwxrwx. 1 root root 39 May 19 16:25 postfix.service -> /usr/lib/systemd/system/postfix.service
lrwxrwxrwx. 1 root root 40 May 19 16:24 remote-fs.target -> /usr/lib/systemd/system/remote-fs.target
lrwxrwxrwx. 1 root root 39 May 19 16:25 rsyslog.service -> /usr/lib/systemd/system/rsyslog.service
lrwxrwxrwx. 1 root root 36 May 19 16:25 sshd.service -> /usr/lib/systemd/system/sshd.service
lrwxrwxrwx. 1 root root 37 May 19 16:25 tuned.service -> /usr/lib/systemd/system/tuned.service
# systemctl list-units --type service |grep running
auditd.service loaded active running Security Auditing Service
crond.service loaded active running Command Scheduler
dbus.service loaded active running D-Bus System Message Bus
firewalld.service loaded active running firewalld - dynamic firewall daemon
getty@tty1.service loaded active running Getty on tty1
hv_fcopy_daemon.service loaded active running Hyper-V FCOPY daemon
hv_kvp_daemon.service loaded active running Hyper-V KVP daemon
hv_vss_daemon.service loaded active running Hyper-V VSS daemon
polkit.service loaded active running Authorization Manager
postfix.service loaded active running Postfix Mail Transport Agent
rsyslog.service loaded active running System Logging Service
sshd.service loaded active running OpenSSH server daemon
systemd-journald.service loaded active running Journal Service
systemd-logind.service loaded active running Login Service
systemd-udevd.service loaded active running udev Kernel Device Manager
tuned.service loaded active running Dynamic System Tuning Daemon
倘若,希望了解支援哪些運作層級類型,請執行「systemctl list-units --type=target」指令即可查詢。
# systemctl list-units --type=target
UNIT LOAD ACTIVE SUB DESCRIPTION
basic.target loaded active active Basic System
cryptsetup.target loaded active active Encrypted Volumes
getty.target loaded active active Login Prompts
local-fs-pre.target loaded active active Local File Systems (Pre)
local-fs.target loaded active active Local File Systems
multi-user.target loaded active active Multi-User System
network-online.target loaded active active Network is Online
paths.target loaded active active Paths
remote-fs.target loaded active active Remote File Systems
slices.target loaded active active Slices
sockets.target loaded active active Sockets
swap.target loaded active active Swap
sysinit.target loaded active active System Initialization
timers.target loaded active active Timers
LOAD = Reflects whether the unit definition was properly loaded.
ACTIVE = The high-level unit activation state, i.e. generalization of SUB.
SUB = The low-level unit activation state, values depend on unit type.
14 loaded units listed. Pass --all to see loaded but inactive units, too.
To show all installed unit files use 'systemctl list-unit-files'.
Systemctl 系統服務管理常用參數
在傳統的 Runlevel 運作環境中,我們常常會使用「service / chkconfig」指令來管理系統服務。現在,新一代的 Systemd 運作環境中一律使用「systemctl」指令來管理系統服務即可。下列為搭配 systemctl 指令管理系統服務的常用參數:- status:查詢指定的系統服務運作狀態,例如,systemctl status sshd。
- stop:停止指定的系統服務,例如,systemctl stop sshd。
- start:啟動指定的系統服務,例如,systemctl start sshd。
- enable:設定指定的系統服務開機時自動啟動,例如,systemctl enable sshd。
- disable:設定指定的系統服務開機時不自動啟動,例如,systemctl disable sshd。
- list-dependencies:查詢指定的系統服務相依性資訊,例如,systemctl list-dependencies sshd。
- list-units:查詢系統服務類型資訊,例如,systemctl list-units --type service 或 systemctl list-units --type mount。
- list-unit-files:列出所有系統服務運作狀態,例如,systemctl list-unit-files。
# systemctl status sshd
● sshd.service - OpenSSH server daemon
Loaded: loaded (/usr/lib/systemd/system/sshd.service; enabled; vendor preset: enabled)
Active: active (running) since Thu 2017-05-25 14:35:21 CST; 1h 14min ago
Docs: man:sshd(8)
man:sshd_config(5)
Process: 18018 ExecStart=/usr/sbin/sshd $OPTIONS (code=exited, status=0/SUCCESS)
Main PID: 18020 (sshd)
CGroup: /system.slice/sshd.service
└─18020 /usr/sbin/sshd
May 25 14:35:21 centos73.weithenn.org systemd[1]: Starting OpenSSH server daemon...
May 25 14:35:21 centos73.weithenn.org systemd[1]: PID file /var/run/sshd.pid not readable (yet?) after start.
May 25 14:35:21 centos73.weithenn.org sshd[18020]: Server listening on 0.0.0.0 port 22.
May 25 14:35:21 centos73.weithenn.org systemd[1]: Started OpenSSH server daemon.
May 25 14:37:54 centos73.weithenn.org sshd[18150]: Accepted password for weithenn from 192.168.16.184 port 60836 ssh2