新聞中心
概述:
系統(tǒng)啟動過程中,當(dāng)內(nèi)核啟動完成,后加載根文件系統(tǒng),后就緒的一些用戶空間的服務(wù)的管理工作,就交由init進(jìn)行啟動和管理,在centos6之前的init的管理方式都類似,相關(guān)的內(nèi)容我們在之前的文章中也做出過介紹。在CentOS7上,init變成了systemd,其管理方式也發(fā)生了重大的變化,本章就跟大家歐一起探討一些關(guān)于CentOS7上的systemd的新特性的內(nèi)容。具體分為一下幾個方面:

成都創(chuàng)新互聯(lián)公司專注于湖口企業(yè)網(wǎng)站建設(shè),響應(yīng)式網(wǎng)站開發(fā),購物商城網(wǎng)站建設(shè)。湖口網(wǎng)站建設(shè)公司,為湖口等地區(qū)提供建站服務(wù)。全流程按需開發(fā),專業(yè)設(shè)計,全程項目跟蹤,成都創(chuàng)新互聯(lián)公司專業(yè)和態(tài)度為您提供的服務(wù)
1、systemd新特性簡介
2、systemd如何管理系統(tǒng)系統(tǒng)上的各服務(wù)
3、systemd管理各個服務(wù)時,所依賴的unit文件的組織格式
4、systemd相關(guān)操作的實際效果展示
第一章 systemd新特性簡介
1、init程序的功能介紹
init程序是當(dāng)系統(tǒng)內(nèi)核啟動后,加載完根文件系統(tǒng),然后就由內(nèi)核加載了init程序,并將后續(xù)用戶空間其他程序的啟動和管理工作交由init程序進(jìn)行管理,除非有需要進(jìn)行內(nèi)核特權(quán)級別操作時,內(nèi)核才會被用戶空間的各個系統(tǒng)調(diào)用,完成一些內(nèi)核級別的操作
在CentOS5、6上,init初始化用戶空間的啟動流程為:/sbin/init程序主要是通過讀取/etc/inittab文件來完成一定的任務(wù),完成的任務(wù)有:
定義默認(rèn)運行級別(/etc/inittab)
運行系統(tǒng)初始化腳本(/etc/rc.d/rc.sysinit)完成系統(tǒng)初始化
關(guān)閉指定運行級別下的各服務(wù),啟動指定級別下需要開啟的各服務(wù)
啟動mingetty虛擬終端,調(diào)用login程序,顯示登錄提示符,讓終端進(jìn)行登錄
init程序的類型:
centos5:SysV init
其配置文件:/etc/inittab
centos6: Upstart
其配置文件:/etc/inittab和/etc/init/*.conf
centos7:Systemd
其配置文件:/usr/lib/systemd/system/、/etc/systemd/system/
2、systemd的新特性:
<1>系統(tǒng)引導(dǎo)時實現(xiàn)服務(wù)并行啟動(前提是并行啟動的服務(wù)之間沒有依賴關(guān)系)
<2>按需激活進(jìn)程(進(jìn)程在沒有訪問時是不會被啟動的,但是服務(wù)仍然處于半活動狀態(tài),只是服務(wù)沒有啟動)
<3>系統(tǒng)狀態(tài)快照,自我保存某一時刻進(jìn)程用戶空間狀態(tài)的快照,可以回滾到某一個時刻
<4>基于依賴關(guān)系定義的服務(wù)控制邏輯
3、systemd的關(guān)鍵特性:
<1>基于socket的激活機(jī)制:socket與程序分離,可以在系統(tǒng)啟動時,先把某個服務(wù)的socket分配給該服務(wù),但該服務(wù)可以事先不用啟動
<2>基于bus的激活機(jī)制:基于總線的激活
<3>基于device的激活機(jī)制:當(dāng)某個設(shè)備接入時,systemd可以自動的去激活諸如device unit、mount unit、automount unit對設(shè)備進(jìn)行識別和掛載等
<4>基于path的激活機(jī)制:系統(tǒng)可以自動監(jiān)控某個目錄存不存在,文件存不存在,并根據(jù)此判斷,來激活別的服務(wù)、進(jìn)程等
<5>系統(tǒng)快照:能夠保存各unit的當(dāng)前狀態(tài)信息于持久存儲設(shè)備中;從而實現(xiàn)了回滾機(jī)制
<6>能向后兼容sysv init腳本:在centos5、6系統(tǒng)上/etc/init.d/目錄下的服務(wù)腳本,systemd也能夠?qū)ζ溥M(jìn)行管理
不兼容的地方:
1):systemctl的命令是固定不變的,也就是說像在centos6上的各類服務(wù)腳本的start、stop這類我們可以通過修改服務(wù)腳本,去實現(xiàn)service 命令使用的時候后面的參數(shù)的變化。但是systemctl控制的時候,則無法通過修改服務(wù)腳本去實現(xiàn)systemctl后面參數(shù)的變化
2):不是由systemd啟動的服務(wù),systemctl無法與之通信,也就是無法對其進(jìn)行控制。在centos6上,利用服務(wù)腳本自身啟動時,利用service依然能夠?qū)ζ溥M(jìn)行管理,但是centos7上,如果服務(wù)腳本自身啟動,而不是通過systemctl進(jìn)行啟動,則systemctl就無法對服務(wù)做出管理
4、systemd的核心概念:unit
unit由其相關(guān)的配置文件進(jìn)行標(biāo)識、識別和配置,也就是說一個unit到底定義與否,由其配置文件進(jìn)行標(biāo)識。這類配置文件中主要包含了幾個類別:系統(tǒng)服務(wù),監(jiān)聽的socket、保存的快照以及其他與init相關(guān)的信息,這些配置文件中主要保存在:
/usr/lib/systemd/system/ 每個服務(wù)最主要的啟動腳本設(shè)置,類似于之前的/etc/init.d/
/run/systemd/system/ 系統(tǒng)執(zhí)行過程中所產(chǎn)生的服務(wù)腳本,比上面目錄優(yōu)先運行
/etc/systemd/system/ 管理員建立的執(zhí)行腳本,類似于/etc/rc.d/rcN.d/Sxx類的功能,比上面目錄優(yōu)先運行
unit的常見類型:
service unit:這類unit的文件擴(kuò)展名為.service,主要用于定義系統(tǒng)服務(wù)(其扮演了在centos6上/etc/init.d/目錄下的服務(wù)腳本的作用)
target unit:這類unit的文件擴(kuò)展名為.target,主要用于模擬實現(xiàn)"運行級別"的概念
device unit:這類unit文件擴(kuò)展名為.device,用于定義內(nèi)核識別的設(shè)備,然后udev利用systemd識別的硬件,完成創(chuàng)建設(shè)備文件名
mount unit:這類unit文件擴(kuò)展名為.mount,主要用于定義文件系統(tǒng)掛載點
socket unit:這類unit文件擴(kuò)展名為.socket,用于標(biāo)識進(jìn)程間通信用到的socket文件
snapshot unit:這類unit文件擴(kuò)展名為.snapshot,主要用于實現(xiàn)管理系統(tǒng)快照
swap unit:這類unit文件擴(kuò)展名為.swap,主要用于標(biāo)識管理swap設(shè)備
automount unit:這類unit文件擴(kuò)展名為.automount,主要用于文件系統(tǒng)自動掛載設(shè)備
path unit:這類unit文件擴(kuò)展名為.path,主要用于定義文件系統(tǒng)中的文件或目錄
第二章 systemd如何管理系統(tǒng)上的各個服務(wù)
1、systemd對服務(wù)的管理(service類unit的管理)
主要是依靠service類型的unit文件進(jìn)行管控的完成的
systemctl命令:
語法:systemctl [OPTIONS…] COMMAND [SERVICE_NAME.service…]
<1>啟動:service SERVICE_NAME start ==> systemctl start SERVICE_NAME.service
<2>停止:service SERVICE_NAME stop ==> systemctl stop SERVICE_NAME.service
<3>重啟:service SERVICE_NAME restart ==> systemctl restart SERVICE_NAME.service
<4>狀態(tài):service SERVICE_NAME status ==> systemctl status SERVICE_NAME.service
centos7里面狀態(tài)信息里顯示的loaded 表示是否加入到systemctl可管理的列表中(類似centos6中chkconfig –add的概念,如果是loaded,表示已經(jīng)添加到列表中,后面disabled表示沒有開機(jī)自動啟動)
<5>條件式重啟:(相當(dāng)于如果服務(wù)之前啟動了,則對服務(wù)進(jìn)行重啟,如果服務(wù)之前沒啟動,則不執(zhí)行任何操作)
service SERVICE_NAME condrestart ==> systemctl tryrestart SERVICE_NAME.service
<6>重載或重啟服務(wù):(相當(dāng)于如果服務(wù)支持不重啟而重載配置文件,就進(jìn)行重載,如果服務(wù)不支持重載配置文件,就重啟服務(wù))
cenntos6不支持
systemctl reload-or-restart SERVICE_NAME.service
<7>重載或條件是重啟:(相當(dāng)于如果服務(wù)支持不重啟而重載配置文件,就進(jìn)行重載,如果服務(wù)不支持重載配置文件,就重啟服務(wù),但重啟的前提是該服務(wù)之前是開啟的)
cenntos6不支持
systemctl reload-or-try-restart SERVICE_NAME.service
<8>查看某服務(wù)當(dāng)前是否激活:
centos6不支持
systemctl is-acive SERVICE_NAME.service
<9>查看所有已激活的服務(wù):
systemctl list-unit –type|-t service
<10>查看所有的服務(wù),也就是所有已經(jīng)裝載load的服務(wù),包含已激活和未激活的:
chkconfig –list ==> systemctl list-unit -t service -a
顯示出來的信息的含義:
loaded:Unit配置文件已處理
active(running):一次或多次持續(xù)處理的運行
active(exited):成功完成一次性的配置
active(waiting):運行中,等待一個事件
inactive:不運行
enabled:開機(jī)啟動
disabled:開機(jī)不啟動
static:開機(jī)不啟動,但可被另一個啟用的服務(wù)激活
<11>設(shè)置服務(wù)可以開機(jī)自動啟動:
chkconfig SERVICE_NAME on ==> systemctl enable SERVICE_NAME.service
<12>禁止服務(wù)開機(jī)自動啟動:
chkconfig SERVICE_NAME off ==> systemctl disable SERVICE_NAME.service
<13>查看某服務(wù)是否能夠開機(jī)自啟動:
chkconfig –list SERVICE_NAME ==> systemctl is-enabled SERVICE_NAME.service
<14>禁止某服務(wù)設(shè)定為開機(jī)自啟:
systemctl mask SERVICE_NAME.service
<15>取消上述禁止:
systemctl unmask SERVICE_NAME.service
<16>查看服務(wù)的依賴關(guān)系:
systemctl list-dependencies SERVICE_NAME.service
2、systemd對target類unit的管理(類似于運行級別的管理)
運行級別的對應(yīng)關(guān)系:
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
<1>級別切換:
init 數(shù)字 ==> systemctl isolate NAME.target
<2>查看當(dāng)前運行級別:
runlevel ==> systemctl –list-unit -t target
<3>查看所有裝載的target:
systemctl –list-unit -t target -a
<4>查看默認(rèn)運行級別:
systemctl get-default
<5>設(shè)定默認(rèn)運行級別:
systemctl set-default NAME.target
centos6修改/etc/inittab文件
<6>切換至緊急救援模式:
systemctl rescue
<7>切換至緊急emergency模式:比緊急救援模式加載的東西更加少,緊急救援模式還會執(zhí)行系統(tǒng)初始化腳本/etc/rc.d/rc.sysinit系統(tǒng)初始化腳本,但emergency不會執(zhí)行系統(tǒng)初始化腳本,通常用于當(dāng)裝了某些硬件驅(qū)動后無法正常啟動時,才進(jìn)入該模式。
systemctl emergency
3、systemd相關(guān)的其他常用命令:
關(guān)機(jī):systemctl halt、systemctl poweroff
重啟:systemctl reboot
掛起:systemctl suspend
快照:systemctl hibernate
快照并掛起:systemctl hybrid-sleep
4、CentOS6與CentOS7上對服務(wù)的管理方式對比總結(jié)
4、CentOS7的啟動流程詳解
<1>UEFi或BIOS初始化,運行POST開機(jī)自檢
<2>選擇啟動設(shè)備
<3>引導(dǎo)裝載程序, centos7是grub2
<4>加載裝載程序的配置文件: /etc/grub.d/ /etc/default/grub /boot/grub2/grub.cfg
<5>加載initramfs驅(qū)動模塊
<6>加載內(nèi)核選項
<7>內(nèi)核初始化, centos7使用systemd代替init
<8>執(zhí)行initrd.target所有單元,包括掛載/etc/fstab
<9>從initramfs根文件系統(tǒng)切換到磁盤根目錄
<10>systemd執(zhí)行默認(rèn)target配置,配置文件/etc/systemd/default.target /etc/systemd/system/
<11>systemd執(zhí)行sysinit.target初始化系統(tǒng)及basic.target準(zhǔn)備操作系統(tǒng)
<12>systemd啟動multi-user.target下的本機(jī)與服務(wù)器服務(wù)
<13>systemd執(zhí)行multi-user.target下的/etc/rc.d/rc.local
<14>systemd執(zhí)行multi-user.target下的getty.target及登入服務(wù)
<15>systemd執(zhí)行g(shù)raphical需要的服務(wù)
當(dāng)前標(biāo)題:CentOS7進(jìn)程管理systemd詳解
網(wǎng)頁路徑:http://www.dlmjj.cn/article/djpopod.html


咨詢
建站咨詢
