Systemctl

在 systemd 服務中 Restart=on-abort 是什麼意思?

  • September 13, 2020

我正在使用一項服務,但它意外死亡(停止)。無論它如何停止,我都想讓它自動重啟!它已配置Restart=on-abort且未重新啟動。該服務不是我編寫的,它來自另一個供應商,所以雖然我想追踪服務崩潰的根本原因,但我還需要一個解決方案來保持系統執行,直到找到根本原因。該服務每天死零到三次,所以不要太頻繁。

該服務目前設置Restart=on-abort為在服務文件中定義的/etc/systemd/system/someone-elses.service

那麼是什麼Restart=on-abort意思呢?

我進行了搜尋並了解了 restart= 的不同值的含義,但在手冊頁中一無所獲:

systemd.service 可以配置為根據多個條件重新啟動服務。 這個 systemctl 手冊頁很好地解釋了這個答案中包含的原因和原因,所以這個答案可以獨立存在。

的定義Restart=on-abort,僅當服務程序由於未指定為乾淨退出狀態的未擷取信號而退出時,服務才會重新啟動。 這意味著除 SIGHUP、SIGINT、SIGTERM 或 SIGPIPE 之外的信號。systemctl 手冊頁將這 4 個信號描述為乾淨信號

就我而言,我實際上想要Restart=always,因為無論程序如何死亡或退出,我都希望它重新啟動。該屬性RestartSec=15s對我來說很重要,因為我希望在重啟之間有一些時間來防止不斷重啟(我不希望這種情況發生,但這就是我有這個設置的原因)。

以下內容取自systemctl 手冊頁並針對 SO 進行了格式化:

**Restart=**值可以是no, on-success, on-failure, on-abnormal, on-watchdog, on-abort, 或always.

下面將解釋這些值中的每一個:

no預設值) - 如果設置為no服務將不會重新啟動。

success - 如果設置為on-success,則僅在服務程序乾淨退出時才會重新啟動。在這種情況下,乾淨的退出意味著退出程式碼為 0,或信號 SIGHUP、SIGINT、SIGTERM 或 SIGPIPE 之一,此外,還包括 SuccessExitStatus= 中指定的退出狀態和信號。

on-failure - 如果設置為on-failure,則服務將在程序以非零退出程式碼退出時重新啟動服務,由信號終止(包括核心轉儲,但不包括上述四個信號),當操作(例如service reload) 超時,以及何時觸發配置的看門狗超時。

on-abnormal - 如果設置為on-abnormal,則當程序被信號終止(包括 on core dump,不包括上述四個信號)、操作超時或觸發看門狗超時時,將重新啟動服務。

on-abort - 如果設置為on-abort,則僅當服務程序由於未指定為乾淨退出狀態的未擷取信號而退出時才會重新啟動服務。如果設置為 on-watchdog,則僅當服務的看門狗超時到期時才會重新啟動服務。

always - 如果設置為always,無論服務是否乾淨退出、是否被信號異常終止或超時,服務都將重新啟動。

另請參閱這個精彩的答案! https://unix.stackexchange.com/a/507917/119816

引用自:https://unix.stackexchange.com/questions/564443