CentOS7下Systemctl詳解

一、Systemd簡介

Systemd是由紅帽公司的一名叫做Lennart Poettering的員工開發,systemd是Linux系統中最新的初始化系統(init),它主要的設計目的是克服Sys V 固有的缺點,提高系統的啟動速度,systemd和upstart是競爭對手,ubantu上使用的是upstart的啟動方式,centos7上使用systemd替換了Sys V,Systemd目錄是要取代Unix時代依賴一直在使用的init系統,兼容SysV和LSB的啟動腳本,而且能夠在進程啟動中更有效地引導加載服務。
system:系統啟動和服務器守護進程管理器,負責在系統啟動或運行時,激活系統資源,服務器進程和其他進程,根據管理,字母d是守護進程(daemon)的縮寫,systemd這個名字的含義就是它要守護整個系統。

二、Systemd新特性

  • 系統引導時實現服務并行啟動
  • 按需啟動守護進程
  • 自動化的服務依賴關系管理
  • 同時采用socket式與D-Bus總線式激活服務
  • 系統狀態快照和恢復
  • 利用Linux的cgroups監視進程
  • 維護掛載點和自動掛載點
  • 各服務間基于依賴關系進行精密控制

三、Systemd核心概念

Unit

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

配置文件:

/usr/lib/systemd/system:

每個服務最主要的啟動腳本設置,類似于之前的/etc/initd.d

/run/system/system

系統執行過程中所產生的服務腳本,比上面的目錄優先運行

/etc/system/system

管理員建立的執行腳本,類似于/etc/rc.d/rcN.d/Sxx類的功能,比上面目錄優先運行,在三者之中,此目錄優先級最高

四、Unit類型

  • systemctl -t help :查看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,文件系統的自動掛載點如:/misc目錄

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

  • time:.timer由systemd管理的計時器
    注:使用systemctl控制單元時,通常需要使用單元文件的全名,包括擴展名,但是有些單元可以在systemctl中使用簡寫方式,如果無擴展名,systemctl默認把擴展名當做.service。例如netcfg和netcfg.service是等同的掛載點會自動轉化為相應的.mount單元,例如/home等價于home.mount設備會自動轉化為相應的.device單元,所以/dev/sd2等價于dev-sda2.device

五、關鍵特性

  • 基于socket的激活機制:socket與服務進程分離
  • 基于D-Bus的激活機制
  • 基于device的激活機制
  • 基于path的激活機制
  • 系統快照:保存各unit的當前狀態信息于持久存儲設備中想后兼容sysv init腳本

六、不兼容

systemctl命令固定不變,不可擴展
非由systemd啟動的服務,systemctl無語與之通信和控制,如:使用之前sys v風格管理的進程就無法收systemd控制

七、Systemd基本工具

監視和控制systemd的主要命令是systemctl。該命令可用于查看系統狀態和管理系統及服務。

管理服務

命令:systemctl  command name.service
啟動:service name start –>systemctl start name.service
停止:service name stop –>systemctl stop name.service
重啟:service name restart–>systemctl restart name.service
狀態:service name status–>systemctl status name.service

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

systemctl try-restart name.service

重載或重啟服務(先加載,然后再啟動)

systemctl reload-or-try-restart name.service

禁止自動和手動啟動

systemctl mask name.service   

執行此條命令實則創建了一個鏈接

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

取消禁止

systemctl unmask name.service   

刪除此前創建的鏈接

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

systemctl is-active name.service   

如果啟動會顯示active,否則會顯示unknown

查看所有已經激活的服務

systemctl list-units –t service

設定某服務開機啟動

systemctl enable name.service

設定某服務開機禁止啟動

systemctl disable name.service

查看服務是否開機自啟

systemctl is-enabled name.servcice

查看服務的依賴關系

systemctl list-dependencies

查看啟動失敗的服務

systemctl --failed -t service

查看服務單元的啟用和禁用狀態

systemctl list-unit-files –t=service

殺死進程

systemctl kill 進程名 

查看服務是否開機自啟

systemctl is-enabled name.servcice

查看開機啟動項

systemctl list-unit-files |   grep enable

為服務添加開機啟動項

systemctl enable name.service

移除開機啟動項的服務

systemctl disable name.service

查找所有或者某個服務

systemctl list-units --type=service 

服務狀態

  • systemctl list-units -t service -a 顯示狀態
  • loaded:unit配置文件已處理
  • active(running):一次或多次持續處理的運行
  • active(exited):成功完成一次性的配置
  • active(waiting):運行中,等待一個事件
  • inactive:不運行
  • enabled:開機啟動
  • disabled:開機不啟動
  • static:開機不啟動,但可以被另一個啟用的服務激活
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容