文件類型
|
系統資源類型 |
單元擴展名 |
單元文件描述 |
|
Service |
.service |
封裝守護進程的啟動、停止、重啟和重載操作,是最常見的一種 Unit 文件 |
|
Target |
.target |
定義target信息及依賴關系,一般僅包含 Unit 段,可以建立不同模塊的依賴關系,以進行統一的啟停控制。 |
|
Device |
.device |
/dev目錄下的硬件設備,主要用于定義設備之間的依賴關系 |
|
Mount |
.mount |
定義文件系統的掛載點,可以替代過去的 /etc/fstab 配置文件 |
|
Automount |
.automount |
用于控制自動掛載文件系統,相當于 SysV-init 的 autofs 服務 |
|
Path |
.path |
用于監控指定目錄或文件的變化,并觸發其它 Unit 運行 |
|
Scope |
.scope |
這種 Unit 文件不是用戶創建的,而是 Systemd 運行時產生的,描述一些系統服務的分組信息 |
|
Slice |
.slice |
用于表示一個 CGroup 的樹 |
|
Snapshot |
.snapshot |
用于表示一個由 systemctl snapshot 命令創建的 Systemd Units 運行狀態快照,可以切回某個快照 |
|
Socket |
.socket |
監控來自于系統或網絡的數據消息 |
|
Swap |
.swap |
定義一個用戶做虛擬內存的交換分區 |
|
Timer |
.timer |
用于配置在特定時間觸發的任務,替代了 Crontab 的功能 |
配置
|
區塊 |
功能 |
|
[Unit] |
啟動順序與依賴關系 |
|
[Service] |
啟動行為定義 |
|
[Install] |
服務安裝定義 |
[Unit]
常用選項配置:
|
選項 |
含義 |
|
Description |
一段描述這個 Unit 文件的文字,通常只是簡短的一句話。 |
|
Documentation |
指定服務的文檔,可以是一個或多個文檔的URL路徑。 |
|
Requires |
此單元所必須依賴的其他單元。當啟動此單元時,也必須啟動這里列出的所有其他單元。 如果此處列出的某個單元啟動失敗、并且恰好又設置了到這個失敗單元的 After= 依賴,那么將不會啟動此單元。此外,無論是否設置了到被依賴單元的 After= 依賴,只要某個被依賴的單元被顯式停止,那么該單元也會被連帶停止。 |
|
Wants |
Requires= 的弱化版。 當此單元被啟動時, 所有這里列出的其他單元只是盡可能被啟動。 但是,即使某些單元不存在或者未能啟動成功, 也不會影響此單元的啟動。 |
|
Before, After |
強制指定單元之間啟動的先后順序。停止順序與啟動順序相反。 |
|
BindsTo |
與 Requires 相似,但是一種更強的關聯。啟動這個服務時會同時啟動列出的所有模塊,當有模塊啟動失敗時終止當前服務。反之,只要列出的模塊全部啟動以后,也會自動啟動當前服務。并且這些模塊中有任意一個出現意外結束或重啟,這個服務會跟著終止或重啟。 |
|
PartOf |
這是一個 BindTo 作用的子集,僅在列出的任何模塊失敗或重啟時,終止或重啟當前服務,而不會隨列出模塊的啟動而啟動。 |
|
OnFailure |
當這個模塊啟動失敗時,就自動啟動列出的每個模塊。 |
|
Conflicts |
與這個模塊有沖突的模塊,如果列出模塊中有已經在運行的,這個服務就不能啟動,反之亦然。 |
上面這些配置中,除了 Description 外,都能夠被添加多次。可以在同一行中用空格來分隔所有值,也可以分行進行指定。
[Install]
常用選項配置:
|
選項 |
含義 |
|
WantedBy |
依賴當前服務的模塊。 |
|
RequiredBy |
依賴當前服務的模塊。 |
|
Also |
此單元的附屬單元, 可以設為一個空格分隔的單元列表。 表示當使用 systemctl enable 啟用 或 systemctl disable 停用此單元時, 也同時自動的啟用或停用附屬單元。 |
以上內容也可以被添加多次,使用空格進行分隔或多行分別配置。
WantedBy和RequiredBy的區別與Want和Require類似。
使用WantdBy和RequiredBy選項后還需要執行`systemctl enable XXX`(當前服務模塊,即被依賴模塊)才能真正生效,以在對應依賴模塊的/etc/systemd/system/xxx.wants或xxx.require/路徑下生成當前模塊的軟鏈接。可以使用`systemctl disable XXX`來取消這種依賴,即對軟鏈接進行刪除。
例如,開機自啟abc.service就可以通過在其service文件中配置:
WantedBy=multi-user.target
然后執行:
systemctl enable abc
來實現。
執行下述命令來取消開機自啟:
systemctl disable abc
[Service]
常用選項配置:
|
選項 |
含義 |
|
Type |
simple, exec, forking, oneshot, dbus, notify, idle 其一。 常用的有 simple(默認類型) 和 forking。默認的 simple 類型可以適應于絕大多數的場景,因此一般可以忽略這個參數的配置。而如果服務程序啟動后會通過 fork 系統調用創建子進程,然后關閉應用程序本身進程的情況,則應該將 Type 的值設置為 forking,否則 systemd 將不會跟蹤子進程的行為,而認為服務已經退出。 |
|
RemainAfterExit |
當該服務的所有進程全部退出之后, 是否依然將此服務視為活動(active)狀態, 默認值為 no。這個配置主要是提供給一些并非常駐內存,而是啟動注冊后立即退出然后等待消息按需啟動的特殊類型服務使用。 |
|
ExecStart |
在啟動該服務時需要執行的命令行(命令+參數),在每個配置文件中只能使用一次。 |
|
ExecStartPre, ExecStartPost |
在執行 ExecStart= 之前/后執行的命令行。 語法規則與 ExecStart= 完全相同。 如果設置了多個命令行, 那么這些命令行將以其在單元文件中出現的順序 依次執行。 注意:不可將 `ExecStartPre=` 用于需要長時間執行的進程。 因為所有由 `ExecStartPre=` 派生的子進程都會在啟動 `ExecStart=` 服務進程之前被殺死。 |
|
ExecReload |
用于設置當該服務被要求重啟時所執行的命令行。 語法規則與 ExecStart= 完全相同。 |
|
ExecStop |
用于設置當該服務被要求停止時所執行的命令行。與 ExecStop= 不同,無論服務是否啟動成功, 此選項中設置的命令都會在服務停止后被無條件的執行。 |
|
ExecStopPost |
設置在該服務停止之后所執行的命令行。 語法規則與 `ExecStart=` 完全相同。 |
|
Restart |
no, on-success, on-failure, on-abnormal, on-watchdog, on-abort, always 其一。 當服務進程 正常退出、異常退出、被殺死、超時的時候, 是否重新啟動該服務。 所謂"服務進程" 是指 ExecStart=, ExecStartPre=, ExecStartPost=, ExecStop=, ExecStopPost=, ExecReload= 中設置的進程。 當進程是由于 systemd 的正常操作(例如 systemctl stop|restart)而被停止時, 該服務不會被重新啟動。 常用的是on, on-failure。 |
|
RestartSec |
服務被重啟前的等待秒數。默認值為100ms,不指定時間單位時默認以秒為單位。 |
|
TimeoutStartSec |
該服務允許的最大啟動時長。若超時未發出"啟動成功"的信號則被視為啟動失敗,默認以秒為單位。 |
|
TimeoutStopSec |
(1) 設置每個 ExecStop= 的超時時長。如果其中之一超時, 那么所有后繼的 ExecStop= 都會被取消,并且該服務也會被 SIGTERM 信號強制關閉。 如果該服務沒有設置 ExecStop= ,那么該服務將會立即被 SIGTERM 信號強制關閉。 (2) (2)設置該服務自身停止的超時時長。如果超時,那么該服務將會立即被 SIGTERM 信號強制關閉 默認以秒為單位。 |
|
TimeoutSec |
同時設置 TimeoutStartSec= 與 TimeoutStopSec= |
|
Environment |
為服務添加環境變量,接受一個空格分隔的``VAR=VALUE`列表,可以多次使用此變量,同一個變量以最后一次設置為準。設為空表示清空先前所有已設置的變量。 注意: (1) 不會在字符串內部進行變量展開(也就是"$"沒有特殊含義); (2) 如果值中包含空格或者等號,那么必須在字符串兩邊使用雙引號(")界定。 |
|
EnvironmentFile |
從文本文件中讀取環境變量的設置。在路徑前加上 "-" 前綴表示忽略不存在的文件。 |
|
User, Group |
設置進程在執行時使用的用戶與組。該設置會影響服務對本地文件系統的訪問權限。 |
|
WorkingDirectory |
進程的工作目錄。當 systemd 作為系統實例運行時,此選項的默認值是 `/` ; 當 systemd 作為用戶實例運行時,此選項的默認值是對應用戶的家目錄。給目錄加上 "-" 前綴,那么表示即使此目錄不存在,也不算致命錯誤。 |
|
Nice |
服務的進程優先級,值越小優先級越高,默認為0。-20為最高優先級,19為最低優先級。 |
|
LimitCPU / LimitSTACK / LimitNOFILE / LimitNPROC 等 |
限制特定服務可用的系統資源量,例如 CPU,程序堆棧,文件句柄數量,子進程數量… |
Restart= 的設置分別對應于哪些退出原因:
|
退出原因(↓) Restart= (→) |
no |
always |
on- success |
on- failure |
on- abnormal |
on- abort |
on- watchdog |
|
正常退出 |
X |
X |
|||||
|
退出碼不為"0" |
X |
X |
|||||
|
進程被強制殺死 |
X |
X |
X |
X |
|||
|
systemd 操作超時 |
X |
X |
X |
||||
|
看門狗超時 |
X |
X |
X |
X |