Systemd

systemctl + Restart=always是什麼意思

  • March 25, 2019

我配置了服務 - calc_mem.service

如下

Restart=on-failure
RestartSec=5
StartLimitInterval=400
StartLimitBurst=3

根據我的理解,上面的配置應該執行以下操作

當服務退出時出現錯誤,服務有 3 次重試

在服務開始之前它將等待 5 秒

我還發現“重啟”也可以是:

Restart=always

我可以理解需要在失敗時重新啟動服務,但這是什麼意思 Restart=always

在這種情況下,我們需要設置 - Restart=always

systemd.service手冊頁有對所取值的描述,Restart=以及哪些選項會導致何時重新啟動的表格。Always幾乎做到了蓋子上所說的:

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

我不確定他們對該功能的想法是什麼,但我們可能會假設,例如一個服務配置為僅執行固定時間段或服務固定數量的請求,然後停止以避免任何可能的資源洩漏。讓 systemd 重新啟動可以更清晰地實現服務本身。

從某種意義上說,我們可能還會問為什麼不在systemd 中包含該選項。由於它能夠在失敗時重新啟動服務,因此它們還可以包括始終重新啟動服務的選項,以防萬一有人需要它。提供工具,而不是政策。

另請注意,此處的“成功退出”定義相當廣泛:

如果設置為on-success,則只有在服務程序乾淨退出時才會重新啟動。在這種情況下,乾淨的退出意味著退出程式碼為 0,或信號、SIGHUP或、之一SIGINT``SIGTERM``SIGPIPE$$ … $$

SIGHUP是要求程序重新啟動的常用方法,但它未處理,它終止程序。因此,擁有Restart=always(或Restart=on-success)允許SIGHUP用於重新啟動,即使沒有服務本身支持。

此外,據我所知,手冊頁always並不意味著它會覆蓋StartLimitIntervaland設置的限制StartLimitBurst

請注意,服務重啟受使用StartLimitIntervalSec=和配置的單元啟動速率限制StartLimitBurst=,請參閱 systemd.unit(5) 了解詳細資訊。只有在達到啟動限制後,重新啟動的服務才會進入失敗狀態。

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