rhcl7的用戶空間父進程systemd

Sysmted

systemd是什麼?

  大家知道當內核完成初始化,以只讀方式掛載rootfs以後,運行了用戶空間的第一個進程叫init,我們以centos系列爲視角來看看:


        CentOS 5: SysV init

        CentOS 6:Upstart

        CentOS 7:Systemd



    Systemd的新特性:

                系統引導時實現服務並行啓動;

                按需激活進程;注:訪問時候才激活進程

                系統狀態快照;

                基於依賴關係定義服務控制邏輯;




核心概念:unit

unit是什麼?

        Unit 文件統一了過去各種不同的系統資源配置格式,例如服務的啓/停、定時任務、設備自動掛載、網絡配置、設備配置、虛擬內存配置等。而 Systemd 通過不同的通過文件的後綴名來區分這些配置文件,.service 文件便是其中的一種。


文件中主要包含了系統服務、監聽的socket、保存的快照以及其它與init相關的信息; 這些配置文件主要保存在:

        /usr/lib/systemd/system  注:系統或用戶提供的配置文件

        /run/systemd/system      注:軟件運行時生成的配置文件

        /etc/systemd/system      注:系統或第三方軟件安裝時添加的配置文件


下面是 Systemd 所支持的12種 Unit 文件類型。


        Service unit:文件擴展名爲.service,用於定義系統服務;

        Target unit:文件擴展爲.target,用於模擬實現“運行級別”;

        Device unit: .device,用於定義內核識別的設備;

        Mount unit: .mount,定義文件系統掛載點;

        Socket unit: .socket,用於標識進程間通信用到的socket文件;

        Snapshot unit: .snapshot, 管理系統快照;

        Swap unit: .swap, 用於標識swap設備;

        Automount unit: .automount,文件系統自動點設備;

        Path unit: .path, 用於定義文件系統中的一文件或目錄;



        關鍵特性:

                基於socket的激活機制:socket與程序分離;

                基於bus的激活機制;

                基於device的激活機制;

                基於Path的激活機制;

                系統快照:保存各unit的當前狀態信息於持久存儲設備中;

                向後兼容sysv init腳本;  /etc/init.d/



    不兼容:

            systemctl的命令是固定不變的;

            非由systemd啓動的服務,systemctl無法與之通信;





    service類型的unit文件命令---syscemctl


用法:

    syscemctl命令:systemctl  [OPTIONS...]  COMMAND  [NAME...]


centos6和7服務啓動關閉對比


1、條件式重啓:service  NAME  condrestart  ==>  systemctl  try-restart  NAME.service

2、重載或重啓服務: systemctl  reload-or-restart  NAME.servcie

3、重載或條件式重啓服務:systemctl  reload-or-try-restart  NAME.service

4、查看某服務當前激活與否的狀態: systemctl  is-active  NAME.service

5、查看所有已激活的服務:systemctl  list-units  --type  service

6、查看所有服務(已激活及未激活): chkconfig --lsit  ==>  systemctl  list-units  -t service     --all 

7、設置服務開機自啓: chkconfig  NAME  on  ==>  systemctl  enable  NAME.service

8、禁止服務開機自啓: chkconfig  NAME  off  ==>  systemctl  disable  NAME.service 

9、查看某服務是否能開機自啓: chkconfig  --list  NAME  ==>  systemctl  is-  enabled            NAME.service

10、禁止某服務設定爲開機自啓: systemctl  mask  NAME.service

11、取消此禁止: systemctl  unmask  NAME.servcie

12、查看服務的依賴關係:systemctl  list-dependencies  NAME.service




剖析service unit file:


文件通常由三部分組成:

   [Unit]:   定義與Unit類型無關的通用選項;用於提供unit的描述信息、unit行爲及依賴關係等;

   [Service]:與特定類型相關的專用選項;此處爲Service類型;

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


 Unit段的常用選項:

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

         After:定義unit的啓動次序;表示當前unit應該晚於哪些unit啓動;其功能與Before相反;

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

         Wants:依賴到的其它units;弱依賴;

         Conflicts:定義units間的衝突關係;



Service段的常用選項:

 Type:用於定義影響ExecStart及相關參數的功能的unit進程啓動類型;


        simple:

        forking:

        oneshot:

        dbus:

        notify:

        idle:

        EnvironmentFile:環境配置文件;

        ExecStart:指明啓動unit要運行命令或腳本; ExecStartPre, ExecStartPost

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

        Restart:


 Install段的常用選項:

                    Alias:

                    RequiredBy:被哪些units所依賴;

                    WantedBy:被哪些units所依賴; 

注意:對於新創建的unit文件或,修改了的unit文件,要通知systemd重載此配置文件;




管理target units:


運行級別:

0  ==>  runlevel0.target,  poweroff.target

1  ==>  runlevel1.target,  rescue.target

2  ==>  runlevel2.tartet,  multi-user.target

3  ==>  runlevel3.tartet,  multi-user.target

4  ==>  runlevel4.tartet,  multi-user.target

5  ==>  runlevel5.target,  graphical.target

6  ==>  runlevel6.target,  reboot.target



centos6和7運行級別切換對比

1、級別切換: init  N  ==>  systemctl  isolate  NAME.target                 

2、查看級別: runlevel  ==>  systemctl  list-units  --type  target

3、查看所有級別: systemctl  list-units  -t  target  -a

4、獲取默認運行級別:systemctl  get-default  

5、修改默認運行級別: systemctl  set-default   NAME.target

6、切換至緊急救援模式: systemctl  rescue

7、切換至emergency模式: systemctl  emergency




   其它常用命令:

關機: systemctl  halt,  systemctl  poweroff

重啓: systemctl  reboot

掛起: systemctl  suspend

快照: systemctl  hibernate 

快照並掛起: systemctl  hybrid-sleep

# systemctl  daemon-reload

練習:爲當前系統的httpd服務提供一個unit文件;


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章