systemd的新特性及常見的systemd unit類型分析


systemd概述

  1)systemd是一種新的linux系統服務管理器,用於替換init系統,能夠管理系統啟動過程和系統服務,一旦啟動起來,就將監管整個系統。在centos7系統中,PID1被systemd所占用;
  2)systemd可以並行地啟動系統服務進程,並且最初僅啟動確實被依賴的服務,極大減少了系統的引導時間,這也就是為什么centos7系統啟動速度比centos6快許多的原因;
  3)systemctl 是 systemd 的主命令,用於管理系統及服務。

    systemd的新特性:
            系統引導時實現服務並行啟動;
            按需激活進程;
            系統狀態快照;
            基於依賴關系定義服務控制邏輯

    systemd的關鍵特性:
            基於socket的激活機制:socket與程序分離;
            基於bus的激活機制;
            基於device的激活機制;
            基於Path的激活機制;
            系統快照:保存各unit的當前狀態信息於持久存儲設備中;
            向后兼容sysv init腳本,放在/etc/init.d/ 注意:systemctl的命令是固定不變的;非由systemd啟動的服務,systemctl無法與之通信

systemd核心概念:unit

    unit由其相關配置文件進行標識、識別和配置;文件中主要包含了系統服務、監聽的socket、保存的快照以及其它與init相關的信息; 這些配置文件主要保存在:
            /usr/lib/systemd/system
            /run/systemd/system
            /etc/systemd/system
    
    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, 用於定義文件系統中的一文件或目錄

systemd的service unit file詳解

1)service unit file 通常由三部分組成:
   [Unit]:定義與Unit類型無關的通用選項;用於提供unit的描述信息、unit行為及依賴關系等;
   [Service]:與特定類型相關的專用選項;此處為Service類型;
   [Install]:定義由“systemctl enable”以及"systemctl disable“命令在實現服務啟用或禁用時用到的一些選項
2)各部分釋義:
   [Unit] 段的常用選項:
     Description:描述信息; 意義性描述;
     After:定義unit的啟動次序,表示當前unit應該晚於哪些unit啟動;其功能與Before相反;
     Requies:依賴到的其它units;強依賴,被依賴的units無法激活時,當前unit即無法激活;
     Wants:依賴到的其它units;弱依賴;
     Conflicts:定義units間的沖突關系
   [Service] 段的常用選項:
     Type:用於定義影響ExecStart及相關參數的功能的unit進程啟動類型,其類型有:
        simple:默認值,執行ExecStart指定的命令,啟動主進程
        forking:以 fork 方式從父進程創建子進程,創建后父進程會立即退出
        oneshot:一次性進程,Systemd 會等當前服務退出,再繼續往下執行
        dbus:當前服務通過D-Bus啟動
        notify:當前服務啟動完畢,會通知systemd再繼續往下執行
        idle:若有其他任務執行完畢,當前服務才會運行
     EnvironmentFile:環境配置文件;
     ExecStart:指明啟動unit要運行命令或腳本; 
     ExecStartPre:在ExecStart之前運行;
        ExecStartPost:在ExecStart之后運行;
     ExecStop:指明停止unit要運行的命令或腳本;
     Restart:當設定Restart=1時,則當次daemon服務意外終止后,會再次自動啟動。
   [Install] 段的常用選項:
     Alias:別名,可使用systemctl command Alias.service;
     RequiredBy:被哪些units所依賴;
     WantedBy:被哪些units所依賴
注意:對於新創建的unit文件或修改了的unit文件,要通知systemd重載此配置文件,通過命令 systemctl daemon-reload.

實例:編譯安裝httpd,並實現通過systemd進行管理

1)通過 rpm -q httpd 命令檢查系統是否已安裝apache,如有先進行卸載;

2)下載Apache(httpd)源碼:https://httpd.apache.org/

3)自定義安裝依賴APR,需要先下載APR庫和PCRE環境:http://apr.apache.org/download.cgi    http://www.pcre.org

4)通過 yum group install "Development Tools" 安裝開發工具包

5)解壓所有已下載的文件

6)安裝PCRE

[root@happiness pcre-8.42]# ./configure --prefix=/usr/local/pcre
[root@happiness pcre-8.42]# make
[root@happiness pcre-8.42]# make install
注意:此處如果安裝的是pcre2的版本,后期編譯Apache時會出現錯誤提示:configure: error: Did not find pcre-config script at /usr/local/pcre。
   此時我們需要卸載已安裝的pcre2:rm -rf /usr/loca/pcre,直接刪除編譯安裝的目錄即可刪除pcre。

7)安裝APR

[root@happiness apr-1.6.3]# ./configure --prefix=/usr/local/apr
[root@happiness apr-1.6.3]# make
[root@happiness apr-1.6.3]# make install

8)安裝APR-util

[root@happiness apr-util-1.6.1]# ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr
[root@happiness apr-util-1.6.1]# make
[root@happiness apr-util-1.6.1]# make install

9)安裝Apache(httpd)

[root@happiness httpd-2.4.33]# ./configure --prefix=/usr/apache24 --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util --with-pcre=/usr/local/pcre
[root@happiness httpd-2.4.33]# make
[root@happiness httpd-2.4.33]# make install

10)運行httpd服務

[root@happiness httpd-2.4.33]# /usr/apache24/bin/apachectl start

注意:啟動httpd服務時有可能提示:servername未設置:

    AH00557: httpd: apr_sockaddr_info_get() failed for happiness
    AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1. Set the 'ServerName' directive globally to suppress this message

  此時我們可通過修改配置文件解決問題:

[root@happiness httpd-2.4.33]# vim /usr/apache24/conf/httpd.conf

  

11)添加服務腳本,使得可以通過systemd來管理httpd服務:

CentOS7服務的systemctl腳本存放在/usr/lib/systemd目錄下,有系統(/usr/lib/systemd/system)和用戶(/usr/lib/systemd/user)之分。此處我們在/usr/lib/systemd/system目錄下新建httpd.service的腳本文件,內容如下:

[Unit]
Description=The Apache HTTP Server 2.4.33
After=network.target remote-fs.target nss-lookup.target

[Service]
Type=simple
EnvironmentFile=/usr/apache24/conf/httpd.conf
ExecStart=/usr/apache24/bin/httpd -k start -DFOREGROUND
ExecReload=/usr/apache24/bin/httpd -k graceful
ExecStop=/bin/kill -WINCH ${MAINPID}

[Install]
WantedBy=multi-user.target

此時我們可以通過 systemctl命令來管理httpd服務了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM