題 systemd forking vs simple?


我正在寫第一篇 systemd 單位文件。

對於 Type,有幾個選擇: forkingsimple等我看過了 Redhat文檔 關於這個主題(表9.9),但仍然不確定何時應該使用哪個選項。

任何準則?


7
2017-12-06 18:58


起源




答案:


從命令行手動啟動服務時(不使用 nohup前綴命令或 & 在後台運行它的後綴),會發生什麼?

a)如果服務啟動並繼續運行,則在按Control-C或以其他方式停止服務之前,提示不會返回: Type = simple 是正確的選擇。

b)如果提示返回但服務仍然在後台運行(即服務自己守護自己),那麼 Type = forking 是正確的選擇。

c)如果服務完成其工作並返回到提示而不留下任何運行(即服務只是調整一些內核設置,將命令發送到其他東西或做類似的事情),那麼 Type = oneshot 可能是正確的選擇。在這種情況下, ExecStart 該服務可能是“設置”某事的命令,並且 ExecStop 將是“取消設置”它的相應命令。這種類型通常有益 RemainAfterExit=true因此,systemd將根據事物最近是“設置”還是“未設置”來跟踪此服務的“狀態”。

另一個 Type 值是特殊情況。例如,如果服務使用D-Bus連接,那麼 Type = dbus 可能是最好的選擇。它使 systemd 意識到這一事實,然後systemd將通過在D-Bus上存在此服務來跟踪此服務(以及依賴於它的任何事情)。


13
2017-12-06 19:39