認識與使用systemctl命令

1、systemctl介紹redis

       一般,Linux 的啓動一直採用init進程。apache

       咱們常常看到架構

$ sudo /etc/init.d/apache2 startapp

或者socket

$ service apache2 startide


       這種方法有兩個缺點:微服務

       一是啓動時間長。init進程是串行啓動,只有前一個進程啓動完,纔會啓動下一個進程。ui

       二是啓動腳本複雜。init進程只是執行啓動腳本,無論其餘事情。腳本須要本身處理各類狀況,這每每使得腳本變得很長。spa

       爲此,LINXU設計引入了Systemd操作系統

       它的設計目標是,爲系統的啓動和管理提供一套完整的解決方案。根據 Linux 慣例,字母d是守護進程(daemon)的縮寫。Systemd 這個名字的含義,就是它要守護整個系統。使用了 Systemd,就不須要再用init了。Systemd 取代了initd,成爲系統的第一個進程(PID 等於 1),其餘進程都是它的子進程。

   1.33.jpg

       經過上圖的命令,咱們能夠查看Systemd版本。

       總的來講,Systemd 的優勢是功能強大,使用方便,缺點是體系龐大,很是複雜。事實上,如今還有不少人反對使用 Systemd,理由就是它過於複雜,與操做系統的其餘部分強耦合,違反」keep simple, keep stupid」的Unix 哲學。

       1.3.jpg

        上圖就是Systemd的架構圖,看着有點嚇人!


2、systemctl命令

       Systemd 並非一個命令,而是一組命令,涉及到系統管理的方方面面。

       下面我來介紹幾個經常使用的命令


# 啓動redis服務

$ sudo systemctl start redis 

# 重啓redis服務

$ sudo systemctl restart redis

# 查看redis服務狀態

$ sudo systemctl status redis

# 重啓系統

$ sudo systemctl reboot

# 關閉系統,切斷電源

$ sudo systemctl poweroff

 

3、利用systemctl添加自定義服務

       在平常開發中,咱們不免搭建各類各樣的服務,這時,咱們能夠利用systemctl添加咱們須要的服務。

1.31.jpg

        以個人系統爲例,配置服務能夠到上圖的目錄中,system存放了系統配置的服務,user目錄存放用戶自定義配置的服務,固然,你也能夠把服務放到system中

1.32.jpg

          上圖是已經搭好的ECF服務,分別有Unit、Service、Install三個關鍵詞


[Unit] 

Description : 服務的簡單描述

Documentation :服務文檔

Before、After:定義啓動順序。Before=xxx.service,表明本服務在xxx.service啓動以前啓動。After=xxx.service,表明本服務在xxx.service以後啓動。

Requires:這個單元啓動了,它須要的單元也會被啓動;它須要的單元被中止了,這個單元也中止了。

Wants:推薦使用。這個單元啓動了,它須要的單元也會被啓動;它須要的單元被中止了,對本單元沒有影響。

[Service]

Type=simple(默認值):systemd認爲該服務將當即啓動。服務進程不會fork。若是該服務要啓動其餘服務,不要使用此類型啓動,除非該服務是socket激活型。

Type=forking:systemd認爲當該服務進程fork,且父進程退出後服務啓動成功。對於常規的守護進程(daemon),除非你肯定此啓動方式沒法知足需求,使用此類型啓動便可。使用此啓動類型應同時指定 PIDFile=,以便systemd可以跟蹤服務的主進程。

Type=oneshot:這一選項適用於只執行一項任務、隨後當即退出的服務。可能須要同時設置 RemainAfterExit=yes 使得 systemd 在服務進程退出以後仍然認爲服務處於激活狀態。

Type=notify:與 Type=simple 相同,但約定服務會在就緒後向 systemd 發送一個信號。這一通知的實現由 libsystemd-daemon.so 提供。

Type=dbus:若以此方式啓動,當指定的 BusName 出如今DBus系統總線上時,systemd認爲服務就緒。

Type=idle: systemd會等待全部任務(Jobs)處理完成後,纔開始執行idle類型的單元。除此以外,其餘行爲和Type=simple 相似。

PIDFile:pid文件路徑 

ExecStart:指定啓動單元的命令或者腳本,ExecStartPre和ExecStartPost節指定在ExecStart以前或者以後用戶自定義執行的腳本。Type=oneshot容許指定多個但願順序執行的用戶自定義命令。

ExecReload:指定單元中止時執行的命令或者腳本。

ExecStop:指定單元中止時執行的命令或者腳本。

PrivateTmp:True表示給服務分配獨立的臨時空間

Restart:這個選項若是被容許,服務重啓的時候進程會退出,會經過systemctl命令執行清除並重啓的操做。

RemainAfterExit:若是設置這個選擇爲真,服務會被認爲是在激活狀態,即便因此的進程已經退出,默認的值爲假,這個選項只有在Type=oneshot時須要被配置。

[Install]

Alias:爲單元提供一個空間分離的附加名字。

RequiredBy:單元被容許運行須要的一系列依賴單元,RequiredBy列表從Require得到依賴信息。 

WantBy:單元被容許運行須要的弱依賴性單元,Wantby從Want列表得到依賴信息。 

Also:指出和單元一塊兒安裝或者被協助的單元。 

DefaultInstance:實例單元的限制,這個選項指定若是單元被容許運行默認的實例。

       好了,上面就是systemctl命令的概述,你們能夠動手實踐一下。


4、總結

       經過systemctl命令,咱們對本身建立的服務進行自定義添加和使用,對於如今主流的微服務架構來講,這個命令帶給咱們不少便利的地方!


睿江雲官網連接:https://www.eflycloud.com/home?from=RJ0035

相關文章
相關標籤/搜索