CentOS7系統用戶空間管理進程systemd詳解

概述:

    系統啟動過程中,當內核啟動完成,后加載根文件系統,后就緒的一些用戶空間的服務的管理工作,就交由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>基于依賴關系定義的服務控制邏輯

    

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

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

    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上對服務的管理方式對比總結

    1.png

    

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

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

    1、servie unit文件的組織格式:

        /etc/systemd/system/目錄下的個unit文件和/usr/lib/systemd/system/下文件的關系:

            當運行級別定義后,該級別下需要加載運行的服務等,會從/usr/lib/systemd/system/下的對應的unit以軟鏈接方式映射/etc/systemd/system/目錄下

            如利用systemctl set-default runlevel5.target 修改默認運行級別后,原來/etc/systemd/system/default.target會重新鏈接到/usr/lib/systemd/system/graphical.target

        service unit file文件的組成:

            文件通常由三部分組成:

                [Unit]:定義與Unit類型無關的通用選項,用于提供unit的描述信息,unit行為及依賴關系等;

                [Service]:與特定類型相關的專用選項,此處為service類型

                [Install]:定義由“systemctl enable”以及“systemctl disable”命令在實現服務啟用或僅用時用到的一些選項;

            unit段的常用選項:

                Description:描述信息,意義性描述

                After:定義unit啟動次序,表示當前unit應該晚于哪些unit啟動,其功能與Before相反

                Requies:依賴到的其他units;強依賴,被依賴的unit無法激活時,當前unit也無法激活

                Wants:指明依賴到的其他units;弱依賴,被依賴的unit無法激活時,當前unit可以被激活

                Conflicts:定義units間的沖突關系

            service段的常用選項:

                Type:用于定義ExecStart及相關參數的功能的unit進程啟動類型;

                    類型:

                        simple:默認值,表示由ExecStart啟動的進程為主進程

                        forking:表示由ExecStart啟動的進程生成的其中一個子進程將成為主進程,啟動完成后,父進程會退出

                        oneshot:功能類似于simple,但是在啟動后續的units進程之前,主進程將會退出

                        notify:類似于simple,表示后續的units,僅在通過sdnotify函數發送通知以后,才能運行該命令

                idle:

                    常見的是notify、forking、simple

                EnvironmentFile :指明環境配置文件,為真正ExecStart執行之前提供環境配置或變量定義等文件

                ExecStart:指明啟動unit要運行的命令或腳本;ExecStartPre、ExecStartPost表示啟動前或啟動后要執行的命令或腳本

                ExecStop:指明停止unit要運行的命令或腳本

                Restart:表示進程意外終止了,會自動重啟

            install段的常用選項:

                Alias:當前unit的別名

                RequiredBy:被那些units所依賴,強依賴

                WantedBy:被那些units所依賴,弱依賴

        注意:對于新創建的unit文件,或修改了的unit文件,必須要讓systemd重新識別此配置文件,可利用:systemctl daemon-reload 進行重載

    2、unit文件示例

        vim /etc/systemd/system/bak.service
            [Unit]
                Description=backup my etc
                Requires=atd.service
            [Service]
                Type=simple
                ExecStart=/bin/bash -c "echo /testdir/bak.sh|at now"
            [Install]
                WantedBy=multi-user.target

        編輯完成后,執行
            systemctl daemon-reload 讓systemd識別此服務配置文件
            systemctl start bak.service  啟動此服務

第四章    systemd相關操作的實際效果展示

    1、系統啟動時,通過修改grub選項中的相關內核參數,實現啟動時進入不同的模式(緊急救援模式、emergency模式)

        在啟動時,啟動菜單項按e鍵,然后在linux16行后添加:(設置內核參數,只影響當次啟動)

            systemd.unit=emergency.target  emergency模式

            或  systemd.unit=rescure.target    緊急救援模式
            rescure.target 比emergency 支持更多的功能,例如日志等

    blob.png  

    blob.png

    2.png

    3.png

    111.png   

    4.png

    5.png

    2、系統啟動時破解root口令

        啟動時任意鍵暫停啟動
        按e鍵進入編輯模式
        將光標移動linux16開始的行,添加內核參數rd.break
        按ctrl-x啟動
        mount –o remount,rw /sysroot
        chroot /sysroot
        passwd root
        touch /.autorelabel

    1.png

    2.png

    3.png

    4.png

    5.png

    6.png

    8.png

    3、修復grub

        主要配置文件 /boot/grub2/grub.cfg
        修復配置文件 grub2-mkconfig > /boot/grub2/grub.cfg
        修復grub
            grub2-install /dev/sda BIOS環境
            grub2-install UEFI環境

    blob.png

    blob.png

    2.png

    3.png

    

    破壞grub,然后進行修復

    blob.png

    blob.png

    11.png

原創文章,作者:M20-1倪文超,如若轉載,請注明出處:http://www.www58058.com/48167

(0)
M20-1倪文超M20-1倪文超
上一篇 2016-09-21
下一篇 2016-09-21

相關推薦

  • Linux Services and Security–part2

    一、請描述一次完整的http請求處理過程 (1).建立或處理連接:接收請求或拒絕請求; (2).接收請求:接收來自于網絡上的主機請求報文中對某特定資源的一次請求的過程; 接收請求的模型: 并發訪問響應模型: 單進程I/O模型:啟動一個進程處理用戶請求;這意味著,一次只能處理一個請求,多個請求被串行響應; 多進程I/O結構:并行啟動多個進程,每個進程響應一個請…

    Linux干貨 2017-11-13
  • Tomcat性能優化-2

    修改Connector運行模式 啟用NIO 或 APR bio介紹 bio(blocking I/O,阻塞式I/O操作),表示Tomcat使用的是傳統的Java I/O操作 默認模式,性能最差,沒有經過任何優化處理和支持 nio模式 nio(non-blocking I/O),Java SE 1.4…

    Linux干貨 2016-09-19
  • N25期—第二周作業

    1、  Linux上的文件管理類命令都有哪些,其常用的使用方法及其相關示例演示。   一、文件權限管理類命令  chown:改變文件所有者  chown [OPTION]… [OWNER][:[GROUP]] FILE…  常用參數 -R:遞歸修改(改目錄就改目錄中的目錄及文件) &n…

    Linux干貨 2016-12-11
  • N21-天天-第九周課程練習

    1、寫一個腳本,判斷當前系統上所有用戶的shell是否為可登錄shell(即用戶的shell不是/sbin/nologin);分別這兩類用戶的個數;通過字符串比較來實現; #!/bin/bash awk -F: '$NF~"/sbin/nologin" {shell++} $NF!~&qu…

    Linux干貨 2016-09-01
  • awk中pipe的shell命令調用與close()

        某公司其員工到勤時間表如下, 取名為 arr.dat, 文件中第一欄為員工代號, 第二欄為到達時間. 本示例中將使用該文件為數據示例文件, 1034 7:26 1025 7:27 1101 7:32 1006 7:45 1012 7:46 1028 7:49 1051 7:51 1029 7:57 1042 7…

    Linux干貨 2016-11-11
  • grep虐我千百遍,我待grep如初戀

    N21第四周博客作業 1、  復制/etc/skel目錄為/home/tuser1,要求/home/tuser1及其內部文件的屬組和其它用戶均沒有任何訪問權限。 [root@Centos6 ~]# cp -r /etc/skel /home/tuser1 [root@Centos6 ~]#…

    Linux干貨 2016-07-16

評論列表(1條)

  • 馬哥教育
    馬哥教育 2016-09-23 11:14

    文章對當天所學的知識,整理的很好,特別是管理服務的·那張圖,能看出來很用心,贊一個。

欧美性久久久久