systemd詳解

百聯達發表於2017-09-01
一:描述

CentOS 7 使用systemd替換了SysV。Systemd目的是要取代Unix時代以來一直在使用的init系統,相容SysV和LSB的啟動指令碼,而且夠在程式啟動過程中更有效地引導載入服務。
 systemd的特性有:  
1.支援並行化任務
2.同時採用socket式與D-Bus匯流排式啟用服務。 按需啟動守護程式(daemon);
3.利用 Linux 的 cgroups 監視程式;
4.支援快照和系統恢復;
5.維護掛載點和自動掛載點;
6.各服務間基於依賴關係進行精密控制。

二:命令

使用 systemctl 控制單元時,通常需要使用單元檔案的全名,包括副檔名(例如 sshd.service)。但是有些單元可以在systemctl中使用簡寫方式。  
1.如果無副檔名,systemctl 預設把副檔名當作 .service。例如 netcf g 和 netcfg.service 是等價的。  
2.掛載點會自動轉化為相應的 .mount 單元。例如 /home 等價於 home. mount。  
3.裝置會自動轉化為相應的 .device 單元,所以 /dev/sda2 等價於 de v-sda2.device。



1.systemctl
該命令可用於檢視系統狀態和管理系統及服務。該命令等同於 systemctl list-units
2.systemctl --failed
輸出執行失敗的單元
3.systemctl start <單元>
啟用單元
4.systemctl stop <單元>
停止單元
5.systemctl restart <單元>
重啟單元
6.systemctl reload <單元>
重新讀取配置
7.systemctl status <單元>
檢視執行狀態
8.systemctl enable <單元>
開啟自動啟用單元
9.systemctl is-enabled <單元>
檢查是否自動啟動
10.systemctl disable <單元>
取消開機自動啟用單元

三:單元檔案編寫

systemd單元檔案的語法來源於 XDG桌面入口配置檔案.desktop檔案,最初的源頭則是Microsoft Windows的.ini檔案。單元檔案可以從兩個地方載入,
優先順序從低到高分別是:  
1. /usr/lib/systemd/system/: 軟體包安裝的單元
2. /etc/systemd/system/: 系統管理員安裝的單元

編寫自定義的 service 檔案時,可以選擇幾種不同的服務啟動方式。啟動方式可透過配置檔案 [Service] 段中的 Type= 引數進行設定。  ?
1.Type=simple(預設值):systemd認為該服務將立即啟動。服務程式 不會fork。如果該服務要啟動其他服務,不要使用此型別啟動,除非該服務是socket啟用型。  ?
2.Type=forking:systemd認為當該服務程式fork,且父程式退出後服務 啟動成功。對於常規的守護程式(daemon),除非你確定此啟動方式無法滿足需求,使用此型別啟動即可。使用此啟動型別應同時指定 PIDFile=,以便systemd能夠跟蹤服務的主程式。  ? 
3.Type=oneshot:這一選項適用於只執行一項任務、隨後立即退出的服務。 可能需要同時設定 RemainAfterExit=yes 使得 systemd 在服務程式退出之後仍然認為服務處於啟用狀態。
4.Type=notify:與 Type=simple 相同,但約定服務會在就緒後向 syst emd 傳送一個訊號。這一通知的實現由 libsystemd-daemon.so 提供。  ? 
5.Type=dbus:若以此方式啟動,當指定的 BusName 出現在DBus系統總 線上時,systemd認為服務就緒。  ? 
6.Type=idle: systemd會等待所有任務(Jobs)處理完成後,才開始執行i dle型別的單元。除此之外,其他行為和Type=simple 類似


四:舉例

點選(此處)摺疊或開啟

  1. [Unit]
  2. Description=Docker Application Container Engine
  3. Documentation=http://docs.docker.com
  4. After=network.target
  5. Wants=docker-storage-setup.service
  6. Requires=docker-cleanup.timer

  7. [Service]
  8. Type=notify
  9. NotifyAccess=all
  10. KillMode=process
  11. EnvironmentFile=-/etc/sysconfig/docker
  12. EnvironmentFile=-/etc/sysconfig/docker-storage
  13. EnvironmentFile=-/etc/sysconfig/docker-network
  14. Environment=GOTRACEBACK=crash
  15. Environment=DOCKER_HTTP_HOST_COMPAT=1
  16. Environment=PATH=/usr/libexec/docker:/usr/bin:/usr/sbin
  17. ExecStart=/usr/bin/dockerd-current \
  18.           --add-runtime docker-runc=/usr/libexec/docker/docker-runc-current \
  19.           --default-runtime=docker-runc \
  20.           --exec-opt native.cgroupdriver=systemd \
  21.           --userland-proxy-path=/usr/libexec/docker/docker-proxy-current \
  22.           $OPTIONS \
  23.           $DOCKER_STORAGE_OPTIONS \
  24.           $DOCKER_NETWORK_OPTIONS \
  25.           $ADD_REGISTRY \
  26.           $BLOCK_REGISTRY \
  27.           $INSECURE_REGISTRY
  28. ExecReload=/bin/kill -s HUP $MAINPID
  29. LimitNOFILE=1048576
  30. LimitNPROC=1048576
  31. LimitCORE=infinity
  32. TimeoutStartSec=0
  33. Restart=on-abnormal
  34. MountFlags=slave

  35. [Install]
  36. WantedBy=multi-user.target


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28624388/viewspace-2144389/,如需轉載,請註明出處,否則將追究法律責任。

相關文章