系統管理之Systemd詳解(centos7)

這篇著重講解下Syetemd的相關知識,systemd可以說是centos7上的重大改革,功能之強大媲美一個操作系統,那下面就從以下幾點來進行講解:
CentOS7啟動
Unit介紹
服務管理和查看
啟動排錯
破解口令
修復grub2

啟動流程:

post-->BISO-->bootloader(MBR)-->kernel(ramdisk)-->rootfs-->/sbin/init

init程序:

不同系統上的init程序版本
centos5:Sysv lnit
centos6:Upstart
centos7:systemd 系統守護進程

systemd介紹

Systemd:系統啟動和服務器守護進程管理器,負責在系統啟動或運行時,激活系統資源,服務器進程和其它進程

systemd的新特性:

系統引導時實現服務并行啟動;實現快速開機
按需啟動守護進程:
能自動保存系統狀態快照:
基于依賴關系定義服務控制邏輯:(自動化的服務依賴關系管理)
同時采用socket式與D-Bus總線式激活服務

systemd核心概念:

unit(單元):
    unit表示不同類型的systemd對象
    unit由其相關的配置文件進行標識,識別和配置.
    相關文件中主要包含了系統服務,監聽的socket,保存的快照以及其他與init相關的信息;
    這些配置文件主要保存在
        /usr/lib/systemd/system:每個服務最主要的啟動腳本設置,類似于之前的/etc/init.d/
        /run/systemd/system:系統執行過程中所產生的服務腳本,比上面目錄優先運行
        /etc/systemd/system:管理員建立的執行腳本,類似于/etc/rc.d/rcN.d/Sxx類的功能,比上面目錄優先運行
unit的常見類別:

系統管理之Systemd詳解(centos7)

    Service unit:文件擴展名為.service,用于定義系統服務,類似服務腳本
    Target unit:文件擴展為.target,用于模擬實現"運行級別";與/etc/inittab不一樣,只是為了對應老版本的系統
    Device unit:.device,用于定義內核識別的設備;centos6下,/dev目錄下的設備文件是由udev根據/sys/目錄下由內核探測輸出的信息而創建的,對centos7來說,/dev目錄下是由systemd和udev聯合創建的,主要由systemd完成.systemd識別硬件,主要靠*.device文件.
    Mount unit:.mount,用于定義文件系統掛載點;kernel 3.0版本后的系統,大都是用cgroup(k控制組)來實現資源分配.mount后看到大量的cgroup信息,cgroup實現對資源分配的一種內核中的資源分配的機制.systemd負責對cgroup的激活,實現資源分配.
    Socket unit:.socket,用于標識進程間通信用到的socket文件.任何主機監聽在一個套接字上,任何進程監聽在一個套接字上,或者任何進程打開一個隨機端口去與別的服務器的進程進行通道,都要創建socket文件.現在這些創建等功能是有systemd負責管理實現的
    Snapshot unit:.snapshot,管理系統快照
    Swap unit:.swap,用于表示swap設備
    Autommount unit:.autommount,文件系統自動掛載點設備
    Path unit:.path,用于定于文件系統中的一文件或目錄使用,常用于當文件系統發生變化時,延遲激活服務,如: spool 目錄

關鍵特性:
    基于socket的激活機制,socket與程序分離;
    基于D-bus(總線)的激活機制;如果總線上有對某一個服務的訪問,那么就基于總線的請求,將某一設備激活
    基于device的激活機制;當某個設備插入,能自動激活mount unit和deviceunit或autommount unit,能監控當前系統和內核所輸出的硬件信息,一旦發現某個硬件出現,先創建設備文件,在自動掛載至某掛載點;掛載點不存在,還能自動創建.
    基于Path的激活機制;系統能夠監控某個目錄或文件的存在,來激活一個服務或進程;比如說,某個進程崩潰時創建一個鎖文件,系統會根據判斷鎖文件的存在,去啟動另一個進程來判斷,崩潰進程的原因;
    系統快照:保存各unit的當前狀態信息于持久存儲設備中;
    向后兼容sysv lnit腳本:/etc/init.d/下的服務腳本

不兼容:
    systemctl的命令是固定不變的;
    非由systemd啟動的服務,systemctl無法與之通信,控制服務;

管理系統服務:

centos7:service類型的unit文件;
所有命令要靠systemctl控制;
注意:能兼容早期的服務腳本

systemctl命令:
    名稱:Control the systemd system and service manager
    格式: systemctl [OPTIONS...] COMMAND NAME[.service]
    命令示例
        啟動服務:service NAME start --> systemctl start NAME.service
        停止服務:service NAME stop --> systemctl stop NAME.service
        重啟服務:service NAME restart --> systemctl restart NAME.service
        查看狀態:service NAME status --> systemctl status NAME.service
        條件式重啟服務:service NAME condrestart--> systemctl try-restart-NAME.service
        重載或重啟服務:systemctl reload-or-restart NAME.service
        重載或條件式重啟:systemctl reload-or-try-restart NAME.service
        查看某服務當前激活與否的狀態:systemctl    is-active NAME.service    
        查看所有已激活的服務:systemctl list-units -t service    
        查看所有服務(激活和未激活):chkconfig --list-->systemctl list-units -t service -a
        查看所有服務的開機自啟狀態:
        chkconfig --list ==> systemctl list-unit-files --type service
        設置服務開機自啟:chkconfig NAME on --> systemctl enable NAME.service
        禁止服務開機自啟:chkconfig NAME off --> systemctl disable NAME.service
        查看某服務是否能開機自啟:chkconfig --list NAME --> systemctl is-enabled NAME.service

        禁止某服務設定為開機自啟或手動啟動:systemctl mask NAME.service
        取消禁止某服務設定為開機自啟或手動啟動:systemctl unmask NAME.service

        查看服務的依賴關系:systemctl list-dependencies NAME.service
        用來列出該服務在哪些運行級別下啟用和禁用:chkconfig sshd –list ==>ls /etc/systemd/system/*.wants/sshd.service
        殺掉進程:systemctl kill 進程名

服務狀態:
    systemctl list-units --type service --all顯示狀態
    loaded:Unit配置文件已處理
    active(running):一次或多次持續處理的運行
    active(exited):成功完成一次性的配置
    active(waiting):運行中,等待一個事件
    inactive:不運行
    enabled:開機啟動
    disabled:開機不啟動
    static:開機不啟動,但可被另一個啟用的服務激活

systemctl命令示例:
    顯示所有單元狀態
        systemctl 或 systemctl list-units
    只顯示服務單元的狀態
        systemctl --type=service
    顯示sshd服務單元
        systemctl status sshd.service –l
    驗證sshd服務當前是否活動
        systemctl is-active sshd
    啟動,停止和重啟sshd服務
        systemctl start sshd.service
        systemctl stop sshd.service
        systemctl restart sshd.service
    重新加載配置
        systemctl reload sshd.service
    列出活動狀態的所有服務單元
        systemctl list-units --type=service
    列出所有服務單元
        systemctl list-units --type=service --all
    查看服務單元的啟用和禁用狀態。
        systemctl list-unit-files --type=service
    列出失敗的服務
        systemctl --failed --type=service
    列出依賴的單元
        systemctl list-dependencies sshd
    驗證sshd服務是否開機啟動
        systemctl is-enabled sshd
    禁用network,使之不能自動啟動,但手動可以
        systemclt disable network
    啟用network
        systemctl enable network
    禁用network,使之不能手動或自動啟動
        systemclt mask network
    啟用network
        systemctl umask network

管理target units:

    unit配置文件: .target
    ls /usr/lib/systemd/system/*.target
    systemctl list-unit-files --type target --all
    運行級別:
        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
    查看依賴性:
        systemctl list-dependencies NAME.target
    級別切換:
        centos6: init N
        centos7: systemctl isolate NAME.target
        注: 只有/lib/systemd/system/*.target文件中AllowIsolate=yes 才能切換(修改文件需執行systemctl daemonreload才能生效)
    查看級別:
        centos6:runlevel 或者 who -r
        centos7:systemctl list-units -t target
    查看所有級別:systemctl list-units -t target -a 
    獲取默認運行級別:sytemctl get-default
    修改默認運行級別:
        systemctl set-default NAME.target
        ls –l /etc/systemd/system/default.target
    切換至緊急救援(級別1)模式:systemctl rescue
    切換至emergency(緊急)模式:各種驅動不會被加載,各種系統初始化功能不會被加載.是真正的實現系統救援的模式:因驅動不兼容導致系統崩潰,適合切換此模式救援.
        systemctl emergency

    其他常用命令:
        關機:systemctl halt,systemctl poweroff
        重啟:systemctl reboot
        掛起:systemctl suspend
        快照:systemctl hlbernate
        快照并掛起:systemctl hybrid-sleep

    修改運行級別就是修改/etc/systemd/system/default.target的連接文件

系統管理之Systemd詳解(centos7)

centos 7 引導順序

UEFi或BIOS初始化,運行POST開機自檢
選擇啟動設備
引導裝載程序, centos7是grub2
加載裝載程序的配置文件: /etc/grub.d/
    /etc/default/grub /boot/grub2/grub.cfg
加載initramfs驅動模塊
加載內核選項
內核初始化, centos7使用systemd代替init
執行initrd.target所有單元,包括掛載/etc/fstab
從initramfs根文件系統切換到磁盤根目錄
systemd執行默認target配置,配置文件
    /etc/systemd/default.target /etc/systemd/system/
systemd執行sysinit.target初始化系統及basic.target準備操
作系統
systemd啟動multi-user.target下的本機與服務器服務
systemd執行multi-user.target下的/etc/rc.d/rc.local
Systemd執行multi-user.target下的getty.target及登入服
務
systemd執行graphical需要的服務

service target file:

 /etc/systemd/system:系統管理員和用戶使用
/usr/lib/systemd/system:發行版打包者使用
以 “ #” 開頭的行后面的內容會被認為是注釋
相關布爾值, 1、 yes、 on、 true 都是開啟, 0、 no、 off、false 都是關閉。
時間單位默認是秒,所以要用毫秒( ms)分鐘( m)等請顯式說明


文件通常有三部分組成:    
    [Unit]:定義與Unit類型無關的通用選項;用于提供unit的描述信息,unit行為及依賴關系
        Description:意義性描述信息 "systemctl status NAME"命令 可顯示
        After:定義unit的啟動次序;表示當前unit應該晚與那些unit啟動;
        Requles:定義依賴到的其他unit;強依賴關系,只有依賴的unit啟動,此unit才能啟動;任何依賴unit啟動不了,當前unit就無法激活
        Wants:定義依賴到的其他unit;弱依賴關系;被依賴的unit對本身的啟動影響不大.
        Conflicts:定義unit間的沖突關系
        Documentation=man:httpd(8) 文檔的路徑
        Documentation=man:apachectl(8)

    [Service]:定義與特定類型相關的專用選項;此處為Service類型
        Type=notify   用來定義影響execstart及相關參數的功能的unit進程啟動類型
            類型:
                simple:默認值,表示由execstart啟動的進程是主進程
                forking: 表示由execstart指明的程序所啟動的進程生成的一個子進程為主進程,啟動完成后,父進程會退出;
                oneshot:類似于simple,在啟動后續的unit前,父進程會退出;一次性的
                dbus:類似于simple,后續的unit僅在主進程得到dbus之后,才能啟動;
                notify:類似于simple,表示后續的unit僅在通過sdbotify函數發送通知以后,然后才能運行這個命令
                ldle:與simple類似,要執行這個daemon必須要所有的工作都順利執行完畢后才會執行。這類的daemon通常是開機到最后才執行即可的服務
        EnvironmentFile=/etc/sysconfig/httpd 指定啟動unit時要用到的環境配置文件,從這個文件中調用變量
        ExecStart=指明啟動unit要t運行的命令或腳本
        ExecReload:指明重新加載unit要運行的命令或腳本
        ExecStop: 指明停止unit要運行的命令或腳本
        Restart:當設定Restart=1 時,則當次daemon服務意外終止后,會再次自動啟動此服務

    [Install]:定義由"systemctl enable"以及"systemctl disable"命令在實現服務啟動或禁用時用到的一些選項
        Alias:當前unit的別名
        RequiredBy:被那些units所依賴;依賴于當前unit的unit列表;強依賴
        WantedBy:被那些units所依賴;弱依賴
        Also:安裝本服務的時候還要安裝別的相關服務

    注意:對于新創建的unit文件或修改了的init文件,要通知systemd重載次配置文件.
        #systemctl daemon-reload
        #systemctl restart NAME.service

    練習:為當前系統的httpd服務提供一個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
        #systemctl start bak

設置內核參數進入特殊運行級別

設置內核參數,只影響當次啟動
    啟動時,在linux16行后添加systemd.unit=desired.target
    systemd.unit=emergency.target
    systemd.unit=recure.target
    recure.target 比emergency 支持更多的功能,例如日志等

系統管理之Systemd詳解(centos7)
系統管理之Systemd詳解(centos7)
系統管理之Systemd詳解(centos7)

啟動排錯

文件系統損壞
    先嘗試自動修復,失敗則進入emergency shell,提示用戶修復
在/etc/fstab不存在對應的設備和UUID等一段時間,如不可用,進入emergency shell
在/etc/fstab不存在對應掛載點
    systemd 嘗試創建掛載點,否則提示進入emergency shell.
在/etc/fstab不正確的掛載選項
    提示進入emergency shell

centos 7 破解root口令

  1. 啟動時任意鍵暫停啟動

  2. 按e鍵進入編輯模式

  3. 將光標移動linux16開始的行,添加內核參數rd.break

  4. 按ctrl-x啟動

  5. mount –o remount,rw /sysroot

  6. chroot /sysroot

  7. passwd root

  8. touch /.autorelabel

系統管理之Systemd詳解(centos7)

修復GRUB2

GRUB“ the Grand Unified Bootloader”
    引導提示時可以使用命令行界面
    可從文件系統引導
主要配置文件 /boot/grub2/grub.cfg
修復配置文件
    grub2-mkconfig > /boot/grub2/grub.cfg
修復grub
    grub2-install /dev/sda BIOS環境
    grub2-install UEFI環境

實戰演練:

為編譯安裝的httpd服務,實現service unit文件
破解centos7 口令
修改默認的啟動內核
啟動時臨時禁用SELinux
啟動時進入emergency模式
刪除編譯安裝的新內核

原創文章,作者:wencx,如若轉載,請注明出處:http://www.www58058.com/48208

(1)
wencxwencx
上一篇 2016-09-21
下一篇 2016-09-21

相關推薦

  • vim編輯器

    在使用Linux的管理過程中有很多的工作就是要修改或設置某些重要軟件的配置文件,這些配置文件都是以ASCLL的純文本格式存在的,所以能夠學好一個文本編輯器就至關重要了,vim作為高級版的vi編輯器不僅可以用不同的顏色來高亮顯示某些重要關鍵字或字符還能進行如shell腳本的編寫,c程序的編輯等功能。 vim編輯器和nano編輯器是一個全屏的編輯器。vim打開文…

    Linux干貨 2016-12-20
  • shell腳本編程__bash的配置

    shell腳本編程__bash的配置   一、bash的配置文件:   按生效范圍劃分,存在兩類:     全局配置: /etc/profile /etc/profile.d/*.sh /etc/bashrc    個人配置: ~/.bash_profile ~/.bashrc 二、she…

    Linux干貨 2016-08-26
  • 馬哥教育網絡班20期+第3周課程練習

    1、列出當前系統上所有已經登錄的用戶的用戶名,注意:同一個用戶登錄多次,則只顯示一次即可。 [root@localhost ~]# who | cut -d" " -f1 | sort -u 2、取出最后登錄到當前系統的用戶的相關信息。 […

    Linux干貨 2016-06-26
  • tcp通訊的服務器和客戶端解析

    服務器端編程步驟, 1.創建Socket對象,下文中的socket都表示一個socket對象 2.綁定IP地址和端口,服務器的IP和端口 3.開始監聽,將在指定的端口上監聽,listen() 如果對方申請連接這個IP和端口,將被聽到,這個過程 4.獲取用于傳輸數據的Socket對象 socket.accept() ->(socket object,ad…

    Linux干貨 2018-01-01
  • Flex Ant自動構建

    1.  Flex SDK Ant        Flex開發者會遇到很多,比如自動構建,在一個有著N多模塊,N處源碼,構建過程復雜的Flex項目開發中,依賴人力手工構建項目非常不現實(機械重復且枯燥無味的過程,相信哪位開發人員都會避之唯恐不及,而且對于人力是非常大的浪費),而通過使用Ant,我們可以將這些工作…

    Linux干貨 2016-03-22
  • ?{ 編譯內核;自制linux; }

    編譯內核、自制linux 自制簡單的linux 前提約定 CentOS 6.8 , Kernel-2.6.32-642.el6.x86_64 基于GRUB – 0.97 / 分區與 boot 分區獨立, /boot 分區 100M+ ,/ 根分區看具體需求,此處為 1G Vmware 12.1,新建一個Li…

    Linux干貨 2016-09-15
欧美性久久久久