CentOS7進程管理systemd詳解



 

概述:

系統啓動過程當中,當內核啓動完成,後加載根文件系統,後就緒的一些用戶空間的服務的管理工做,就交由init進行啓動和管理,在CentOS6以前的init的管理方式都相似,相關的內容咱們在以前的文章中也作出過介紹。在CentOS7上,init變成了systemd,其管理方式也發生了重大的變化,本章就跟你們歐一塊兒探討一些關於CentOS7上的systemd的新特性的內容。具體分爲一下幾個方面:linux

一、systemd新特性簡介centos

二、systemd如何管理系統系統上的各服務服務器

三、systemd管理各個服務時,所依賴的unit文件的組織格式socket

四、systemd相關操做的實際效果展現centos7

第一章    systemd新特性簡介

一、init程序的功能介紹

init程序是當系統內核啓動後,加載完根文件系統,而後就由內核加載了init程序,並將後續用戶空間其餘程序的啓動和管理工做交由init程序進行管理,除非有須要進行內核特權級別操做時,內核纔會被用戶空間的各個系統調用,完成一些內核級別的操做spa

在CentOS五、6上,init初始化用戶空間的啓動流程爲:/sbin/init程序主要是經過讀取/etc/inittab文件來完成必定的任務,完成的任務有:操作系統

定義默認運行級別(/etc/inittab)hibernate

運行系統初始化腳本(/etc/rc.d/rc.sysinit)完成系統初始化rest

關閉指定運行級別下的各服務,啓動指定級別下須要開啓的各服務htm

啓動mingetty虛擬終端,調用login程序,顯示登陸提示符,讓終端進行登陸

init程序的類型:

centos5:SysV init

其配置文件:/etc/inittab

centos6: Upstart

其配置文件:/etc/inittab和/etc/init/*.conf

centos7:Systemd

其配置文件:/usr/lib/systemd/system/、/etc/systemd/system/

二、systemd的新特性:

<1>系統引導時實現服務並行啓動(前提是並行啓動的服務之間沒有依賴關係)

<2>按需激活進程(進程在沒有訪問時是不會被啓動的,可是服務仍然處於半活動狀態,只是服務沒有啓動)

<3>系統狀態快照,自我保存某一時刻進程用戶空間狀態的快照,能夠回滾到某一個時刻

<4>基於依賴關係定義的服務控制邏輯

 

CentOS7/RHEL7 systemd詳解   http://www.linuxidc.com/Linux/2015-04/115937.htm

爲何systemd會被如此迅速的採用? http://www.linuxidc.com/Linux/2014-08/105789.htm

systemd 與 sysVinit 彩版對照表 http://www.linuxidc.com/Linux/2014-09/106455.htm

太有用了!用systemd命令來管理Linux系統!  http://www.linuxidc.com/Linux/2014-09/106490.htm

淺析 Linux 初始化 init 系統,第 3 部分: Systemd  http://www.linuxidc.com/Linux/2014-12/110383.htm

三、systemd的關鍵特性:

<1>基於socket的激活機制:socket與程序分離,能夠在系統啓動時,先把某個服務的socket分配給該服務,但該服務能夠事先不用啓動

<2>基於bus的激活機制:基於總線的激活

<3>基於device的激活機制:當某個設備接入時,systemd能夠自動的去激活諸如device unit、mount unit、automount unit對設備進行識別和掛載等

<4>基於path的激活機制:系統能夠自動監控某個目錄存不存在,文件存不存在,並根據此判斷,來激活別的服務、進程等

<5>系統快照:可以保存各unit的當前狀態信息於持久存儲設備中;從而實現了回滾機制

<6>能向後兼容sysv init腳本:在centos五、6系統上/etc/init.d/目錄下的服務腳本,systemd也可以對其進行管理

不兼容的地方:

1):systemctl的命令是固定不變的,也就是說像在centos6上的各種服務腳本的start、stop這類咱們能夠經過修改服務腳本,去實現service 命令使用的時候後面的參數的變化。可是systemctl控制的時候,則沒法經過修改服務腳本去實現systemctl後面參數的變化

2):不是由systemd啓動的服務,systemctl沒法與之通訊,也就是沒法對其進行控制。在centos6上,利用服務腳本自身啓動時,利用service依然可以對其進行管理,可是centos7上,若是服務腳本自身啓動,而不是經過systemctl進行啓動,則systemctl就沒法對服務作出管理

四、systemd的核心概念:unit

unit由其相關的配置文件進行標識、識別和配置,也就是說一個unit到底定義與否,由其配置文件進行標識。這類配置文件中主要包含了幾個類別:系統服務,監聽的socket、保存的快照以及其餘與init相關的信息,這些配置文件中主要保存在:

/usr/lib/systemd/system/    每一個服務最主要的啓動腳本設置,相似於以前的/etc/init.d/  

/run/systemd/system/    系統執行過程當中所產生的服務腳本,比上面目錄優先運行

/etc/systemd/system/    管理員創建的執行腳本,相似於/etc/rc.d/rcN.d/Sxx類的功能,比上面目錄優先運行

blob.png

blob.png       

blob.png

unit的常見類型:

service unit:這類unit的文件擴展名爲.service,主要用於定義系統服務(其扮演了在centos6上/etc/init.d/目錄下的服務腳本的做用)

target unit:這類unit的文件擴展名爲.target,主要用於模擬實現"運行級別"的概念

device unit:這類unit文件擴展名爲.device,用於定義內核識別的設備,而後udev利用systemd識別的硬件,完成建立設備文件名

mount unit:這類unit文件擴展名爲.mount,主要用於定義文件系統掛載點

socket unit:這類unit文件擴展名爲.socket,用於標識進程間通訊用到的socket文件

snapshot unit:這類unit文件擴展名爲.snapshot,主要用於實現管理系統快照

swap unit:這類unit文件擴展名爲.swap,主要用於標識管理swap設備

automount unit:這類unit文件擴展名爲.automount,主要用於文件系統自動掛載設備

path unit:這類unit文件擴展名爲.path,主要用於定義文件系統中的文件或目錄

第二章    systemd如何管理系統上的各個服務

一、systemd對服務的管理(service類unit的管理)

主要是依靠service類型的unit文件進行管控的完成的

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>狀態:service SERVICE_NAME status ==>  systemctl status SERVICE_NAME.service

centos7裏面狀態信息裏顯示的loaded 表示是否加入到systemctl可管理的列表中(相似centos6中chkconfig –add的概念,若是是loaded,表示已經添加到列表中,後面disabled表示沒有開機自動啓動)

<5>條件式重啓:(至關於若是服務以前啓動了,則對服務進行重啓,若是服務以前沒啓動,則不執行任何操做)

service SERVICE_NAME condrestart ==>  systemctl tryrestart SERVICE_NAME.service

<6>重載或重啓服務:(至關於若是服務支持不重啓而重載配置文件,就進行重載,若是服務不支持重載配置文件,就重啓服務)

cenntos6不支持  

systemctl reload-or-restart SERVICE_NAME.service

<7>重載或條件是重啓:(至關於若是服務支持不重啓而重載配置文件,就進行重載,若是服務不支持重載配置文件,就重啓服務,但重啓的前提是該服務以前是開啓的)

cenntos6不支持  

systemctl reload-or-try-restart SERVICE_NAME.service

<8>查看某服務當前是否激活:

centos6不支持  

systemctl is-acive SERVICE_NAME.service

<9>查看全部已激活的服務:

systemctl list-unit –type|-t service

<10>查看全部的服務,也就是全部已經裝載load的服務,包含已激活和未激活的:

chkconfig –list ==> systemctl list-unit -t service -a

顯示出來的信息的含義:

loaded:Unit配置文件已處理
                active(running):一次或屢次持續處理的運行
                active(exited):成功完成一次性的配置
                active(waiting):運行中,等待一個事件
                inactive:不運行
                enabled:開機啓動
                disabled:開機不啓動
                static:開機不啓動,但可被另外一個啓用的服務激活

<11>設置服務能夠開機自動啓動:

chkconfig SERVICE_NAME on ==> systemctl enable SERVICE_NAME.service

<12>禁止服務開機自動啓動:

chkconfig SERVICE_NAME off ==> systemctl disable SERVICE_NAME.service

<13>查看某服務是否可以開機自啓動:

chkconfig –list SERVICE_NAME ==> systemctl is-enabled SERVICE_NAME.service

<14>禁止某服務設定爲開機自啓:

systemctl mask SERVICE_NAME.service

<15>取消上述禁止:

systemctl unmask SERVICE_NAME.service

<16>查看服務的依賴關係:

systemctl list-dependencies SERVICE_NAME.service

 

二、systemd對target類unit的管理(相似於運行級別的管理)

運行級別的對應關係:

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 數字 ==> systemctl isolate NAME.target

<2>查看當前運行級別:

runlevel ==> systemctl –list-unit -t target

<3>查看全部裝載的target:

systemctl –list-unit -t target -a

<4>查看默認運行級別:

systemctl get-default

<5>設定默認運行級別:

systemctl set-default NAME.target

centos6修改/etc/inittab文件

<6>切換至緊急救援模式:

systemctl rescue

<7>切換至緊急emergency模式:比緊急救援模式加載的東西更加少,緊急救援模式還會執行系統初始化腳本/etc/rc.d/rc.sysinit系統初始化腳本,但emergency不會執行系統初始化腳本,一般用於當裝了某些硬件驅動後沒法正常啓動時,才進入該模式。

systemctl emergency

三、systemd相關的其餘經常使用命令:

關機:systemctl halt、systemctl poweroff

重啓:systemctl reboot

掛起:systemctl suspend

快照:systemctl hibernate

快照並掛起:systemctl hybrid-sleep

四、CentOS6與CentOS7上對服務的管理方式對比總結

1.png

 

四、CentOS7的啓動流程詳解

<1>UEFi或BIOS初始化,運行POST開機自檢

        <2>選擇啓動設備
        <3>引導裝載程序, centos7是grub2
        <4>加載裝載程序的配置文件: /etc/grub.d/   /etc/default/grub    /boot/grub2/grub.cfg
        <5>加載initramfs驅動模塊
        <6>加載內核選項
        <7>內核初始化, centos7使用systemd代替init
        <8>執行initrd.target全部單元,包括掛載/etc/fstab
        <9>從initramfs根文件系統切換到磁盤根目錄
        <10>systemd執行默認target配置,配置文件/etc/systemd/default.target /etc/systemd/system/

        <11>systemd執行sysinit.target初始化系統及basic.target準備操做系統
        <12>systemd啓動multi-user.target下的本機與服務器服務
        <13>systemd執行multi-user.target下的/etc/rc.d/rc.local
        <14>systemd執行multi-user.target下的getty.target及登入服務

        <15>systemd執行graphical須要的服務

更多詳情見請繼續閱讀下一頁的精彩內容: http://www.linuxidc.com/Linux/2016-09/135464p2.htm

相關文章
相關標籤/搜索