歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> CentOS7進程管理systemd詳解

CentOS7進程管理systemd詳解

日期:2017/2/28 13:48:43   编辑:Linux教程

概述:

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

1、systemd新特性簡介

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

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

4、systemd相關操作的實際效果展示

第一章 systemd新特性簡介

1、init程序的功能介紹

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

在CentOS5、6上,init初始化用戶空間的啟動流程為:/sbin/init程序主要是通過讀取/etc/inittab文件來完成一定的任務,完成的任務有:

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

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

關閉指定運行級別下的各服務,啟動指定級別下需要開啟的各服務

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

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>系統引導時實現服務並行啟動(前提是並行啟動的服務之間沒有依賴關系)

<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

3、systemd的關鍵特性:

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

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

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

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

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

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

不兼容的地方:

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

2):不是由systemd啟動的服務,systemctl無法與之通信,也就是無法對其進行控制。在centos6上,利用服務腳本自身啟動時,利用service依然能夠對其進行管理,但是centos7上,如果服務腳本自身啟動,而不是通過systemctl進行啟動,則systemctl就無法對服務做出管理

4、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類的功能,比上面目錄優先運行

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如何管理系統上的各個服務

1、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

2、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

3、systemd相關的其他常用命令:

關機:systemctl halt、systemctl poweroff

重啟:systemctl reboot

掛起:systemctl suspend

快照:systemctl hibernate

快照並掛起:systemctl hybrid-sleep

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

4、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需要的服務

Copyright © Linux教程網 All Rights Reserved