linux systemd參數詳解


參考:

https://www.qingheluo.com/systemdzhongdepeizhiwenjian/

https://linuxeye.com/400.html

簡介:

CentOS 7 使用systemd替換了SysV。Systemd目的是要取代Unix時代以來一直在使用的init系統,兼容SysV和LSB的啟動腳本,而且夠在進程啟動過程中更有效地引導加載服務。

systemd的特性有:

  • 支持並行化任務
  • 同時采用socket式與D-Bus總線式激活服務;
  • 按需啟動守護進程(daemon);
  • 利用 Linux 的 cgroups 監視進程;
  • 支持快照和系統恢復;
  • 維護掛載點和自動掛載點;
  • 各服務間基於依賴關系進行精密控制。

systemd里的重要概念:

單元:

一個單元配置文件可以描述如下內容之一:系統服務(.service)、掛載點(.mount)、sockets(.sockets) 、系統設備(.device)、交換分區(.swap)、文件路徑(.path)、啟動目標(.target)、由 systemd 管理的計時器(.timer)。詳情參閱 man 5 systemd.unit。

使用 systemctl 控制單元時,通常需要使用單元文件的全名,包括擴展名(例如 sshd.service)。但是有些單元可以在systemctl中使用簡寫方式。

  • 如果無擴展名,systemctl 默認把擴展名當作 .service。例如 netcfg 和 netcfg.service 是等價的。
  • 掛載點會自動轉化為相應的 .mount 單元。例如 /home 等價於 home.mount。
  • 設備會自動轉化為相應的 .device 單元,所以 /dev/sda2 等價於 dev-sda2.device。

單元控制項:

systemctl stop|start|restart|reload|is-enabled|enable|disable|daemon-reload 單元名稱

編寫單元文件(也就是服務文件,這里只對服務文件做示例)

路徑 systemd控制的相關文件的作用
/usr/lib/systemd/system/ 服務啟動的腳本啟動路徑
/etc/systemd/system/multi-user.target.wants/ 開機自啟服務存放路
etc/systemd/system/default.target 默認運行級別配置文件
  • 每一個Unit都需要有一個配置文件用於告知systemd對於服務的管理方式
  • 配置文件存放於/usr/lib/systemd/system/,設置開機啟動后會在/etc/systemd/system目錄建立軟鏈接文件
  • 每個Unit的配置文件配置默認后綴名為.service
  • 在/usr/lib/systemd/system/目錄中分為system和user兩個目錄,一般將開機不登陸就能運行的程序存在系統服務里,也就是/usr/lib/systemd/system
  • 配置文件使用方括號分成了多個部分,並且區分大小寫
配置單元(服務)文件模板:

nginx

[Unit]
Description=nginx
After=network.target

[Service]
Type=forking
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/usr/local/nginx/sbin/nginx -s quit
PrivateTmp=true

[Install]
WantedBy=multi-user.target

tomcat

[Unit]
Description=tomcat
After=network.target

[Service]
Type=forking
Environment="export JAVA_HOME=/opt/jdk"
Environment="export JAVA_BIN=$JAVA_HOME/bin"
Environment="export JRE_HOME=$JAVA_HOME/jre"
Environment="export CLASSPATH=$JAVA_HOME/jre/lib:$JAVA_HOME/lib"
Environment="export PATH=$PATH:$JAVA_HOME/bin"
ExecStart=/usr/local/tomcat/bin/startup.sh
ExecStop=/usr/local/tomcat/bin/shutdown.sh
Restart=on-failure

[Install]
WantedBy=multi-user.target

該文件內容只要分為三個部分 Unit Service Install,Server這段要根據Unit(單元)的類型來確定

Unit:
  • ​ Description:描述信息
  • ​ After:表明需要依賴的服務,作用決定啟動順序
  • ​ Before:表明被依賴的服務
  • ​ Requles:依賴到的其他unit ,強依賴,即依賴的unit啟動失敗。該unit不啟動。
  • ​ Wants:依賴到的其他unit,弱依賴,即依賴的unit 啟動失敗。該unit繼續啟動
  • ​ Conflicts:定義沖突關系

處理依賴關系

使用systemd時,可通過正確編寫單元配置文件來解決其依賴關系。典型的情況是,單元A要求單元B在A啟動之前運行。在此情況下,向單元A配置文件中的 [Unit] 段添加 Requires=B 和 After=B 即可。若此依賴關系是可選的,可添加 Wants=B 和 After=B。

請注意 Wants= 和 Requires= 並不意味着 After=,即如果 After= 選項沒有制定,這兩個單元將被並行啟動。

依賴關系通常被用在服務(service)而不是目標(target)上。例如, network.target 一般會被某個配置網絡接口的服務引入,所以,將自定義的單元排在該服務之后即可,因為 network.target 已經啟動。

Server:
  • Type:
simple:默認值,執行ExecStart指定的命令,啟動主進程
forking:以 fork 方式從父進程創建子進程,創建后父進程會立即退出,子進程將成為主進程
oneshot:一次性進程,類似於simple,但只執行一次,Systemd 會等當前服務退出,再繼續往下執行
dbus:當前服務通過D-Bus啟動,類似於simple,但會等待 D-Bus 信號后啟動
notify:當前服務啟動完畢,會發出通知信號通知Systemd,然后 Systemd 再繼續啟動其他服務
idle:類似於simple,但是要等到其他任務都執行完畢,才會啟動該服務。一種使用場合是為讓該服務的輸出,不與其他服務的輸出相混合
  • User:指定開機自動運行該程序的用戶名

  • Group:指定開機自動運行該程序的用戶組

  • LimitCORE=infinity:限制內核文件的大小

  • LimitNOFILE=65536:服務最大允許打開的文件描述符數量

  • LimitNPROC=65536:進程的最大數量

  • PIDFile:指定開機自動運行該程序的pid文件(一般在程序配置文件中配置該項)

  • ExecStart:啟動當前服務的命令

  • ExecStartPre:啟動當前服務之前執行的命令

  • ExecStartPost:啟動當前服務之后執行的命令

  • ExecReload:重啟當前服務時執行的命令

  • ExecStop:停止當前服務時執行的命令

  • ExecStopPost:停止當其服務之后執行的命令

  • KillMode:定義如何停止服務。KillMode字段可以設置的值如下control-group(默認值):當前控制組里面的所有子進程,都會被殺掉;process:只殺主進程;mixed:主進程將收到SIGTERM信號,子進程收到SIGKILL信號;none:沒有進程會被殺掉,只是執行服務的stop命令。如ssh服務將KillMode設為process,不停止任何sshd子進程,即子進程打開的SSH session仍然保持連接,這個設置不太常見,但對 sshd 很重要,否則你停止服務的時候,會連自己打開的 SSH session一起殺掉。

  • RestartSec:自動重啟當前服務等待的秒數

  • Restart:定義了當前服務退出后,Systemd的重啟方式,可能的值包括no(默認值):退出后不會重啟;always:不管是什么退出原因,總是重啟;on-success:只有正常退出時(退出狀態碼為0),才會重啟;on-failure:非正常退出時(退出狀態碼非0),包括被信號終止和超時,才會重啟;on-abnormal:只有被信號終止和超時,才會重啟;on-abort:只有在收到沒有捕捉到的信號終止時,才會重啟;on-watchdog:超時退出,才會重啟,如ssh服務設置為on-failure,表示任何意外的失敗,就將重啟sshd。如果sshd正常停止(比如執行systemctl stop命令),它就不會重啟。

  • RemainAfterExit:值為yes或no,表示進程退出以后,服務仍然保持執行。這樣的話,一旦使用systemctl stop命令停止服務,ExecStop指定的命令就會執行

  • TimeoutSec:定義 Systemd 停止當前服務之前等待的秒數

  • Environment:指定當前服務的環境變量

  • EnvironmentFile:指定當前服務的環境參數文件,該文件的key=value鍵值對,可以用$key的形式,在當前配置文件中獲取

  • 所有的啟動設置都可以加上一個連詞號(-),表示"抑制錯誤",即發生錯誤的時候,不影響其他命令的執行。比如,EnvironmentFile=-/etc/sysconfig/sshd,表示即使/etc/sysconfig/sshd文件不存在,也不會拋出錯誤。

  • PrivateTmp 的值設置成true ,服務啟動時會在/tmp目錄下生成類似systemd-private-433ef27ba3d46d8aac286aeb1390e1b-nginx.service-RedVyu的文件夾,用於存放nginx的臨時文件。

Install:
  • WantedBy:它的值是一個或多個 Target,當前 Unit 激活時(enable)符號鏈接會放入/etc/systemd/system目錄下面以 Target 名 + .wants后綴構成的子目錄中
  • RequiredBy:它的值是一個或多個 Target,當前 Unit 激活時,符號鏈接會放入/etc/systemd/system目錄下面以 Target 名 + .required后綴構成的子目錄中
  • Alias:當前 Unit 可用於啟動的別名
  • Also:當前 Unit 激活(enable)時,會被同時激活的其他 Unit


免責聲明!

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



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