Linux systemd管理

                                                          Linux systemd管理

本章內容:

centos7啟動

unit介紹

服務管理和查看

啟動排錯

破解口令

恢復grub2

 

systemd

系統啟動和服務守護進程管理器,為系統的第一個進程,負責在系統啟動或運行時,激活系統資源,服務進程和其它進程。

 

systemd新特性:

     系統引導時實現服務并行啟動;

     按需啟動守護進程;

     自動化的服務依賴關系管理;

     同時采用socket式和D-Busdesktop-Bus)總線式激活服務;

     socket:監聽服務端口,服務并未啟動,當有進程訪問這個端口的服務時,socket采取激活端口對應的服務,相當于,centos6上的xinetd服務。

     D-Bus總線:系統中的圖形工具都是基于D-Bus總線激活的。

     系統狀態快照;

 

核心概念:unit

     unit表示不同類型的systemd對象,通過配置文件進行標識和配置,文件中主要包含了系統服務、監聽socket、保護的系統快照以及其它與init相關的信息。

 

centos7:系統服務腳本文件路徑:

      centos7的系統服務腳本文件的存放路徑為/usr/lib/systemd/system,相當于centos6系統中的/etc/rc.d/init.d目錄下的系統服務腳本文件。

     示例:

       [root@centos7 system]# cd /usr/lib/systemd/system

 

centos7:系統運行自產生的服務腳本存放路徑:/run/systemd/system

     示例:

       root@centos7 system]# cd /run/systemd/system/

 

centos7:系統管理員自建立的系統服務執行腳本建議存放到:/etc/systemd/system目錄下,此目錄下的優先級要高于/usr/lib/systemd/system目錄的優先級。

     示例:

       [root@centos7 system]# cd /etc/systemd/system/

 

unit類型:

     查看unit類型:

       systemctl   -t –typehelp

         示例:

           [root@centos7 cd]# systemctl  -t help

           Available unit types:

           service

           socket

           target

           device

           mount

           automount

           snapshot

           timer

           swap

           path

           slice

           scope

           [root@centos7 cd]#

        

      service unit:文件擴展名 .service,用于定義系統服務。

      target unit:文件擴展名 .target ,用于模擬實現“運行級別”。

      device unit:用于定義內核識別的設備。

      mount unit.mount,定義文件系統掛載點。

      socket unit.socket,用于標識進程間通信用的socket文件,也可以在系統啟動時,延時啟動服務,實現按需啟動。

      snapshot unit.snapshot,管理系統快照。

      swap unit.swap,用于標識swap設備。

      automount unit.automount,文件系統的自動掛載點。

      path unit .path,用于定義文件系統中的一個文件或目錄使用,長用于當文件系統變化時,延遲激活服務,如spool目錄。

 

systemd關鍵特性:

       基于socket的激活機制:socket與服務程序分離;

       基于D-Bus的激活機制:

       基于device的激活機制:

       基于path的激活機制:

       系統快照:保存個unit的當前狀態信息于持久存儲設備中向后兼容sysv init 腳本。

       systemctl命令固定不變,不可擴展,systemctl是一個二進制程序,后跟的參數都是固定好的。

 

管理系統服務:

     命令:systemctl   COMMAND  name.service

     啟動服務:systemctl  start name.service

     停止服務:systemctl  stop name.service

     重啟服務:systemctl  restart name.service

     查看狀態:systemctl  status name.service

     

     條件式重啟:已啟動才重啟,否則不做任何操作。

        systemctl   try-restart  name.service

     

     重載或重啟服務:先加載,在重啟:

        systemctl   reload-or-restart  name.service

   

     重載或條件式重啟服務:

        systemctl  reload-or-try-restart  name.service

 

      禁止自動和手動啟動:

         systemctl mask name.service

        示例:

          [root@centos7 init.d]# systemctl mask httpd

          ln -s '/dev/null' '/etc/systemd/system/httpd.service'

          [root@centos7 init.d]# ll /etc/systemd/system/httpd.service

          lrwxrwxrwx. 1 root root 9 sep 27 05:02 /etc/systemd/system/httpd.service -> /dev/null

 

      取消禁止自動和手動啟動:

          systemctl unmask name.service  

         示例:

           [root@centos7 init.d]# systemctl unmask httpd

           rm '/etc/systemd/system/httpd.service'

           [root@centos7 init.d]#

 

      查看某服務當前激活與否的狀態:

           systemctl   is-active name.service

          示例:

           [root@centos7 system]# systemctl is-active  httpd

           active

           [root@centos7 system]#

 

      查看所有已激活的服務:

           systemctl   list-units  -t | –type  service

          示例:

            [root@centos7 system]# systemctl  list-units  -t service | wc -l

             74

            [root@centos7 system]#

 

       查看所有服務:

           systemct    list-units  -t service  -a|-all

 

       查看服務是否開機自啟動:

            systemctl   is-enabled name.service

           示例:

             [root@centos7 system]# systemctl is-enabled  httpd

             disabled

             [root@centos7 system]#

 

       設定某服務開機自啟動:

             systemctl  enable   name.servcie

           示例:

             [root@centos7 system]# systemctl enable  httpd

              ln-s'/usr/lib/systemd/system/httpd.service'

              '/etc/systemd/system/multi-user.target.wants/httpd.service'

             [root@centos7 system]#

  

        設定某服務開機禁止自啟動:

              systemctl   disable  name.service

             示例:

              [root@centos7 system]# systemctl disable httpd.service

              rm '/etc/systemd/system/multi-user.target.wants/httpd.service'

              [root@centos7 system]#

 

        查看所有服務的開機自啟狀態:

               systemctl  list-unit-files  -type  service

    

        用來列出該服務在那些運行級別下啟用和禁用:

              ls  /etc/systemd/system/*.wants/name.service

             示例:

              [root@centos7 system]# ls /etc/systemd/system/*.wants/httpd.service

              /etc/systemd/system/multi-user.target.wants/httpd.service

              [root@centos7 system]#

        

       殺掉進程:

              systemctl   kill

 

服務狀態:

systemctl   list-units-files  –type service  -all

 

loaded unit配置文件已經被加載過了;

activerunning):一次或多次持續處理的運行;

actionexited):成功完成一次性的配置;

activewaiting):運行中等待一個事件;

inactive:不運行;

enabled:開機自動;

disabled:開機不啟動;

static:開機不啟動,但可被另一個啟用的服務激活;

 

運行級別:

target units

    unit配置文件:/usr/lib/systemd/system/*.target

  

     centos 6                     centos7

 

        runlevel0.target              poweroff.target

        runlevel1.target              rescue.target

        runlevel2.target              multi-user.target     

        runlevel3.target              multi-user.target

        runlevel4.target              multi-user.target

        runlevel5.target              graphical.target

        runlevel6.target              reboot.target

 

     切換運行級別:

         init #  ——–> systemctl   isolate   name.target

      注意:只有/usr/lib/systemd/system/*.target文件中allowisolate=yes才可以切換運行級別(修改文件需執行 systemctl   daemon-reload 才可以生效)

     示例:

        [root@centos7 system]# systemctl isolate multi-user.target

 

     查看target

       runlevel   who  -r  

       systemctl  list-units  -t  target

 

     查看系統的默認運行級別:

       systemctl   get-default

      示例:

        [root@centos7 Desktop]# systemctl get-default

        graphical.target

        [root@centos7 Desktop]#

 

     修改默認運行級別:

         systemctl   set-default  name.target

        示例:

         [root@centos7 Desktop]# systemctl set-default graphical.target

         rm '/etc/systemd/system/default.target'

         ln -s '/usr/lib/systemd/system/graphical.target' '/etc/systemd/system/default.target'

         [root@centos7 Desktop]#

         [root@centos7 Desktop]# ls -l /etc/systemd/system/default.target

 

      切換至緊急救援模式:

           systemctl  rescue

  

      切換至emergency模式:

           systemctl   emergency

 

       其他常用命令: init poweroff、 reboot都成為systemctl的軟鏈接

           關機:systemctl halt  systemctl poweroff

           重啟:systemctl  reboot

           掛起:systemctl suspend

           休眠:systemctl hibernate

           休眠并掛起:systemctl hybrid-sleep

 

centos7啟動引導順序:

       UEFIBios初始化,運行POST開機自檢。

       選擇啟動設備。

       引導裝載程序,centos7是使用grub2。

       加載程序的配置文件:/etc/grub2.cfg  /etc/default/grub  /boot/grub2/grub2/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.targetgetty.target及登錄服務。

       systemd執行graphical需要的服務。

 

service unit 文件格式:

       /etc/systemd/system:系統管理員和用戶使用。

       /usr/lib/systemd/system:發行版打包者使用。

       #”開頭的行后面的內容會被認為是注釋。

       相關的布爾值,1、yes、on、true都是開啟,0、no、off、false都是關閉。

       時間單位默認是秒,所以要用毫秒(ms)分鐘(m)等請顯是說明。

       service unit file文件通常由三部分組成:

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

       [Service]:定義有“system enable”以及“systemctl disable”命令在實現服務啟用或禁用時用到的一些選項。

       Unit段的常用選項:

          Description:描述信息

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

          Requires:依賴到的其他unit,強依賴,被依賴的units無法激活時,當前unit即無法激活。

          Wants:依賴到的其他units,弱依賴。

          Centos:定義units間的沖突關系。

       Service段的常用選項:

          Type:定義影響execstart及相關參數的功能的unit進程啟動類型。

          simple:默認值,這個daemon主要由execstart接的指令串來啟動,啟動后常駐于內存中。

          forking:由execstart啟動的程序透過spawns延伸出其他子程序來作為此daemon的主要服務。原生父程序在啟動結束后就會終止。

         oneshot:與simple類似,不過這個程序在工作完畢后就結束了,不會常駐在內存中。

         dbus:與simple類似,但這個daemon必須要在取得一個D-Bus的名稱后,才會繼續運作,因此通常也要同時設定busname=才行。

          notify:在啟動完成后會發送一個通知消息。還需要配合notifyaccess來讓systemd接受消息。

          idle:與simple類似,要執行這個daemon必須要所有的工作都順利執行完畢后才會執行。這類的daemon通常是開機到最后才執行即可的服務。

          Environmentfile:環境配置文件。

          Execstart:指明啟動unit要運動命令或腳本的絕對路徑。

          ExecstartpreExecstart前運行。

          ExecstartpostExecstart后運行。

          Restart:當設定Restart=1時,則當次daemon服務以外終止后,會再次自動啟動此服務。

       Install段的常用選項:

          Alias:別名,可使用systemctl command alias.service

          Requiredby:被哪些units所依賴,強依賴。

          Wantdby:被哪些units所依賴,弱依賴。

          Also:安裝本服務的時候還要安裝別的相關服務。

注意:對于新創建的unit文件,或者修改了的unit文件,要通知systemd重載配置文件,而后可以選擇重啟

       執行 systemctl  daemon-reload

         

設置內核參數:

      設置內核參數,只影響當次啟動。

      啟動時,在Linux16行后添加systemd.unit=desired.target

      systemd.unit=emergency.target

      systemd.unit=recure.target

      recure.targetemergency支持更多的功能,例如日志。

示例:

  Linux16行最后添加:systemd-unit=multi-user.target,系統啟動后進入到字符界面。

 

文件系統損壞:

      先嘗試自動修復,失敗則進入emergency shell,提示用戶修復。

      /etc/fstab不存在對應的設備和UUID等一段時間,如不可用,進入emergency shell。

      /etc/fstab不存在對應掛載點,systemd嘗試創建掛載點,否則提示進入emergency shell 。

      /etc/fstab不正確的掛載選項,提示進入emergency shell。

 

破解root口令:

     1)啟動時在看到grub啟動菜單時,按任意鍵暫停啟動;

     2)按“e”鍵進入編輯模式;

     3)將光標移動到Linux16開始的行,在行尾添加內核參數:rd.break

     4)按ctrl-x啟動,進入到類似于單用戶的shell中。

     5)進來之后執行mount命令查看系統根所掛載的目錄

     6)執行mount  -o remount,rw  /sysroot以讀寫方式沖洗掛載系統根“/sysroot

     7)執行chroot  /sysroot

     8)執行passwd  root

     9)執行 touch /.autolabel重新給/etc/shadow文件打標簽,不然selinux策略會阻止啟動,造成啟動故障。

 

修該grub2配置文件:

      centos7中的grub主配置文件/boot/grub2/grub.cfg

      grub.cfg文件的配置模板:/etc/default/grub

      修改好的模板文件參數使用 grub2-mkconfig  -o  /boot/grub2/grub.cfg重定向到grub主配置文件中。

    

修復grub

BIOS環境:grub2-install  /dev/sda

UEFI環境:grub2-install

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

           

   

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

(0)
zhengyibozhengyibo
上一篇 2016-09-28
下一篇 2016-09-28

相關推薦

  • 海量數據處理算法—Bloom Filter

    1. Bloom-Filter算法簡介         Bloom-Filter,即布隆過濾器,1970年由Bloom中提出。它可以用于檢索一個元素是否在一個集合中。        Bloom Filter(BF)是一種空間效率很高的隨機數據結構,它利用位數組很簡潔地表…

    Linux干貨 2015-10-22
  • lvs基礎知識

    簡介  Cluster是什么?    Cluster其實就是組織多個主機構建高實現性能、高可靠、多并發、大容量的同一功能的系統。  常見的集群類型:   (1) Load Balancing: 負載均衡集群   (2) High Avaiability: 高可用集群   (3) …

    Linux干貨 2015-06-23
  • 搭建LAMP+NFS(附加mysql共享NFS目錄練習總結)

    練習一 環境布局: 主機6 route A (10.1.32.14)作為DNS服務器 主機centos 7 class (10.1.32.3)作為Apache,PHP(模塊方式)服務器1(有discuz程序) 主機centos 7 server (10.1.32.13)作為Apache,php(模塊方式)服務器2(無discuz) 主機centos 6 cl…

    系統運維 2016-10-25
  • 關于IO的同步,異步,阻塞,非阻塞

    上次寫了一篇文章:Unix IO 模型學習。恰巧在這次周會的時候,@fp1203 (goldendoc成員之一) 正好在講解poll和epoll的底層實現。中途正好討論了網絡IO的同步、異步、阻塞、非阻塞的概念,當時講下來,大家的理解各不相同,各執己見。搜索了網絡上的一些文章,觀點也各不相同,甚至連wiki也將異步和非阻塞當成一個概念在解釋。  &…

    Linux干貨 2015-04-02
  • 為你的網絡傳輸加把鎖(OpenSSL)

    互聯網形成的初期,更多關注的是設備之間通過網絡相互訪問功能的實現,我們都知道,兩個設備之間要想相互通信,就必需遵循某種協議,于是早期的互聯網也出現來眾多的協議,比如傳輸層最著名的協議就是tcp和udp,而應用層比較著名的協議有:http、ftp、pop、smtp、dns、telnet等等,而這些協議這開發初期,更多是關注功能的實現,數據這網絡上傳輸是明文方式…

    Linux干貨 2015-12-06
  • shell編程中的三種流程控制

    流程控制 v 一 、過程式編程語言: 1.順序執行 2.選擇執行 3.循環執行  條件選擇if 語句   選擇執行:   注意: :if 語句可 嵌套    單分支 if 判斷條件;then 條件為真的分支代碼 fi    雙分支 if 判斷條件; then …

    Linux干貨 2016-08-21
欧美性久久久久