systemctl + Restart=always是什麼意思
我配置了服務 - 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
並不意味著它會覆蓋StartLimitInterval
and設置的限制StartLimitBurst
:請注意,服務重啟受使用
StartLimitIntervalSec=
和配置的單元啟動速率限制StartLimitBurst=
,請參閱 systemd.unit(5) 了解詳細資訊。只有在達到啟動限制後,重新啟動的服務才會進入失敗狀態。