Systemd是一種新的linux系統服務管理器。
它替換了init系統,能夠管理系統的啟動過程和一些系統服務,一旦啟動起來,就将監管整個系統。在本文中,我們用的是安裝有 systemd 216 版本的centos 7.0,其最新版本可以從 freedesktop.org 下載下傳得到。
Linux 引導方式systemd upstart sysV http://www.linuxidc.com/Linux/2014-01/95555.htm
為什麼systemd會被如此迅速的采用? http://www.linuxidc.com/Linux/2014-08/105789.htm
systemd 與 sysVinit 彩版對照表 http://www.linuxidc.com/Linux/2014-09/106455.htm
Linux Systemd——在RHEL/CentOS 7中啟動/停止/重新開機服務 http://www.linuxidc.com/Linux/2014-08/105975.htm
因為linux作業系統裡出現的這一個新人,PID 1被“systemd”占據了,這能通過pstree指令看到。
- [[email protected] ~]# pstree

那麼現在讓我們來探索systemd擅長什麼,它又有多大的可能性成為sysVinit的新的替代品。
1. 更快啟動
sysvinit一次一個串行地啟動程序。
而Systemd則并行地啟動系統服務程序,并且最初僅啟動确實被依賴的那些服務,極大地減少了系統引導的時間。
你可以用下面的指令看到系統引導用時:
- [[email protected] ~]# systemd-analyze
使用 time 參數也能夠顯示同樣的内容。
- [[email protected] ~]# systemd-analyze time
如果你想以程序初始化所占用時間排序列印出所有正在運作的單元清單,那麼systemd-analyze指令可以幫助你完成這個任務。
- [[email protected] ~]# systemd-analyze blame
上面的截屏隻顯示了小部分程序,你可以就像less分頁器那樣用箭頭滾動清單。
2. systemctl 指令
systemctl指令是自systemd出現以來被廣泛讨論的指令。你可以通過這個指令管理你的整個系統,讓我們通過探究這個指令來更進一步。
2.1 列出單元
systemctl指令可以帶上list-units,也可以什麼選項都不帶來列出所有正在運作的單元。
- [[email protected] ~]# systemctl
或
- [[email protected] ~]# systemctl list-units
2.2 列出失敗的單元
運作失敗的單元可以用帶--failed選項的指令顯示出來。
- [[email protected] ~]# systemctl --failed
你可以在這篇文章很多地方看到systemctl的用法。
3. 管理服務
讓我們來看看systemd是怎麼管理系統服務的。
3.1 激活的服務
所有被激活的服務可以同下面這條指令來檢視。
- [[email protected] ~]# systemctl list-units -t service
3.2 服務狀态
在sysvinit中,我們可以用“service”指令來管理服務,但在systemd中,我們用systemctl這個指令。 我們可以用下面這個指令來檢視服務是否在運作。
- [[email protected] ~]# systemctl status dnsmasq
3.3 啟動一個服務
用下面這條指令來啟動服務。
- [[email protected] ~]# systemctl start dnsmasq
對應于service指令,這個指令不進行輸出。但是毋庸置疑,我們可以通過再次檢視這個剛剛被啟動的服務的status(狀态)來确認他是否被成功地啟動了。
3.4 停止一個服務
現在聰明的你一定知道怎麼在systemd下用指令來關閉服務了吧。
- [[email protected] ~]# systemctl stop dnsmasq
3.5 重新開機一個服務
類似的,重新開機系統服務是用‘systemctl restart’來管理的。
- [[email protected] ~]# systemctl restart dnsmasq
3.6 重新加載一個服務
在我們需要重新加載服務的配置檔案又不想重新開機這個服務(例如ssh)時,我們可以用這個指令。
- [[email protected] ~]# systemctl reload sshd
雖然上述幾個指令的文法是可以工作的,但是官方文檔建議我們用下面這種文法形式來運作指令(LCTT 譯注,即使用在服務名後面跟上“.service”的完整名稱):
- [[email protected] ~]# systemctl status dnsmasq.service
4. 管理引導時的服務
chkconfig指令被用來管理系統引導時的服務。同樣用systemd也可以管理引導時的系統服務。
4.1 檢查服務引導時是否運作
這條指令用來确定服務是否是引導時啟動的。
- [[email protected] ~]# systemctl is-enabled dnsmasq.service
4.2 讓服務在引導時運作
systemctl指令是這樣來enable(使之在引導時啟動)一個服務的。(這相當于sysvinit中的‘chkconfig on’)
- [[email protected] ~]# systemctl enable dnsmasq.service
4.3 取消服務在引導時運作
類似的,使服務不在引導時啟動用這個指令。
- [[email protected] ~]# systemctl disable dnsmasq.service
5. 管理遠端系統
所有剛才提到的systemctl指令通常都能被用來管理遠端主機,完成這個任務将用到ssh來進行通訊。你隻需要像這樣将遠端主機和使用者名添加到systemctl指令後。
- [[email protected] ~]# systemctl status sshd -H [email protected].2.3.4
6. 管理目标
Systemd有一個完成與sysVinit的runlevels相似任務的構想。
sysVinit的runlevels大多是以數字分級的。這裡是runlevers在systemd中的對應元素。
0 runlevel0.target, poweroff.target
1, s, single runlevel1.target, rescue.target
2, 4 runlevel2.target, runlevel4.target, multi-user.target
3 runlevel3.target, multi-user.target
5 runlevel5.target, graphical.target
6 runlevel6.target, reboot.target
emergency emergency.target
6.1 改變目前目标
目前target可以用這個指令切換。
- [[email protected] ~]# systemctl isolate graphical.target
6.2 列出目前目标
如果你想檢視你正處于哪個target中,你需要列出相應的單元。雖然這樣操作可能讓你不太爽,但是這就是systemd工作的方式。
- [[email protected] ~]# systemctl list-units --type=target
你可以看到“graphical.target”列在此處,這就是我們剛才切換到的目标。現在,讓我們切換runlevel到multi-user.target,然後分析下列指令的輸出。
- [[email protected] ~]# systemctl isolate multi-user.target
- [[email protected] ~]# systemctl list-units --type=target
6.3 列出預設目标
用這個systemctl指令來檢視預設目标。
- [[email protected] ~]# systemctl get-default
6.4 改變預設目标
通過systemctl的set-default指令可以将某個目标設定成預設目标。
- [[email protected] ~]# systemctl set-default graphical.target
7. 記錄 systemd 的日志
journald是systemd獨有的日志系統,替換了sysVinit中的syslog守護程序。指令journalctl用來讀取日志。
- [[email protected] ~]# journalctl
7.1 檢視引導資訊
運作journalctl -b指令來檢視所有引導日志。
- [[email protected] ~]# journalctl -b
7.2 即時顯示引導日志
下面這個指令可以實時顯示系統日志(類似tail -f)。
- [[email protected] ~]# journalctl -f
7.3 檢視特定服務的日志
你可以像這樣運用journalctl來檢視你隻想看到的服務或可執行程式的日志。
- [[email protected] ~]# journalctl /usr/sbin/dnsmasq
8. 電源管理
systemctl指令也可以用來關機,重新開機或者休眠。
要關機、重新開機、挂起和休眠,分别使用如下指令:
- [[email protected] ~]# systemctl poweroff
- [[email protected] ~]# systemctl reboot
- [[email protected] ~]# systemctl suspend
- [[email protected] ~]# systemctl hibernate
9. 又及
systemd帶來了一整套與作業系統互動的新途徑,并且極具特色。舉個栗子,你可以用hostnamectl指令來獲得你的linux機器的hostname和其它有用的獨特資訊。
- [[email protected] ~]# hostnamectl
本文永久更新連結位址:http://www.linuxidc.com/Linux/2014-09/106490.htm