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),其餘進程都是它的子進程。
經過上圖的命令,咱們能夠查看Systemd版本。
總的來講,Systemd 的優勢是功能強大,使用方便,缺點是體系龐大,很是複雜。事實上,如今還有不少人反對使用 Systemd,理由就是它過於複雜,與操做系統的其餘部分強耦合,違反」keep simple, keep stupid」的Unix 哲學。
上圖就是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添加咱們須要的服務。
以個人系統爲例,配置服務能夠到上圖的目錄中,system存放了系統配置的服務,user目錄存放用戶自定義配置的服務,固然,你也能夠把服務放到system中
上圖是已經搭好的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命令,咱們對本身建立的服務進行自定義添加和使用,對於如今主流的微服務架構來講,這個命令帶給咱們不少便利的地方!