以docker.service為例,說明各個參數的含義:
[Unit] #主要用于配置整個服務的詳情資訊以及服務依賴,用于快速識别該服務的相關情況以及依賴項目
Description=Docker Application Container Engine #服務的簡單描述
Documentation=https://docs.docker.com#指定服務的文檔,便于管理者快速追溯
BindsTo=containerd.service#和Requires類似,但是依賴性更強,這裡列出來的任何服務停止運作或崩潰,該服務将立即被停止。考慮服務的啟動依賴,一般會和After一起使用
After=network-online.target firewalld.service#用于指定該服務在那些服務之後啟動 ,停止時正好相反
Wants=network-online.target#Requires的弱化版,當該服務啟動時,盡可能的啟動該指令指定的服務,但不會影響該服務的啟動
#Before#用于指定該服務在那些服務之前啟動,停止時正好相反
#Requires #設定該服務必須依賴的其他服務,是以在該服務啟動之前,指定的服務清單必須全部線上,否則服務将啟動失敗或掉線。但如果未設定After和Before指令時,該服務和依賴的服務将會并行的同時啟動。注意: 該指令依賴的服務不一定要在整個生命周期都保持一直線上,這取決于其他的檢查條件
#Requisite#和Requires類似,差別是在該服務啟動時,該指令指定的依賴資源必須全部處于啟動成功的狀态,否則該服務立馬失敗,并且不會啟動那些失敗的依賴服務。是以一般建議Requisite和After 一起聯合使用會比較好。
#PartOf#和Requires類似,但僅作用于服務的停止和重新開機,表示該服務是所列服務的一部分,會随指定服務的啟動而啟動。注意: 該指令是單向依賴,服務的主動的重新開機不會影響其他
[Service]#主要用于配置整個服務生命周期的管理行為
Type=notify#設定程序的啟動類型。必須設為 simple, exec, forking, oneshot, dbus, notify, idle 之一
#具體見 “http://www.jinbuguo.com/systemd/systemd.service.html#”
EnvironmentFile=-/etc/sysconfig/docker#指定包含key=value的配置檔案 -$(filename)表示可忽略,即當檔案不存在或環境變量加載失敗時也不影響後續的處理邏輯。
#Environment #指定Key=Value 的環境配置
#程序生命周期管理
ExecStart=/usr/bin/dockerd -H unix:// $DOCKER_OPTS#啟動邏輯, 該指令用于啟動程序的核心邏輯
ExecReload=/bin/kill -s HUP $MAINPID#熱加載, 該指令用于對程序進行熱加載,通常情況用于 配置變更後的熱重新開機
#重新開機政策
TimeoutSec=0#一個同時設定 TimeoutStartSec= 與 TimeoutStopSec= 的快捷方式。
RestartSec=2#多久後重新開機
Restart=always#當服務程序正常退出、異常退出、被殺死、逾時的時候,是否重新啟動該服務。always無條件重新開機
StartLimitBurst=3#啟動的最大次數限制,超過後停止繼續重新開機
StartLimitInterval=60s#啟動時間的最大間隔
#資源限制
LimitNOFILE=infinity#限制程序使用的檔案描述符數量,等同ulimit -n
LimitNPROC=infinity#限制程序的數量,等同于ulimit -u
LimitCORE=infinity#???
TasksMax=infinity
Delegate=yes
KillMode=process#設定在單元停止時,殺死程序的方法。process 表示僅殺死主程序。
[Install]#用于配置服務的安裝級别,當我們設定服務在Linux的那種級别下啟動或開機自啟動時會加載該部分(典型的當chkconfig nginx on或者systemctl enable|disable nginx.service時會讀取該部分的配置)
WantedBy=multi-user.target #設定啟用服務的依賴服務
參考連結:
https://bgbiao.top/post/systemd-doc/
http://www.jinbuguo.com/systemd/systemd.index.html