服務與 shutdown.target 不衝突的影響

服務與 shutdown.target 不衝突的影響

<長話短說>
我正在基於目前的 Debian 10 Buster 和核心 ntfsd 調整僅限 NFSv4 的檔案伺服器;系統 v241。該nfs-kernel-server發行版中的軟體包的 systemd 腳本讓我覺得有點奇怪。根據 systemd.service(5),一些服務定義檔(包括其nfs-server.service本身)附帶設置DefaultDependencies=no,以便該單元不會自動取得依賴項:Conflicts=shutdown.target

[使用DefaultDependencies=yes][s]服務單元將具有類型Conflicts=Before=上的依賴性[...] shutdown.target。這些可確保正常服務單元在系統關閉之前乾淨地終止。

與我在其他 systemd 自己的軟體包中看到的不同,這些都沒有明確提供。命令

systemctl show nfs-server.service | egrep '^(Want|Requ|Bind|Bound|Before|After|Confl)'

證實這其實是正確的:不存在這樣的依賴關係。手冊繼續,

只有涉及早期啟動或延遲系統關閉的服務才應停用此選項。

NFS 伺服器恰恰不是這樣,因為在網路完全啟動之前它無法開始提供服務,一旦系統開始關閉,它就應該停止接受新請求並在負載下停止。

這不是軟體包中具有類似設定的單一服務,但這是我最擔心的。我正在雲端設定中推出單一用途的虛擬機,檔案伺服器可能擁有大量的 RAM (64-128G),所有這些都被檔案系統快取塞滿了,如 htop(1) 所示。由於這是一台文件儲存機器,我無法用言語來表達我多麼希望伺服器,引用手冊,“在系統關閉之前乾淨地終止”,特別是考慮到我用一點可靠性來換取導出文件系統的ext4 掛載選項data=writebacknobarrier1 的性能。
</長話短說>

所以我的問題歸結為一句話是:

當系統實際關閉時,不具有Conflicts=Before=相依性的systemd 服務會發生什麼情況?shutdown.target


1 這是經過深思熟慮的工程權衡,根據雲端提供者的 SLA 和一系列效能測試的結果進行評估,並且與問題的本質完全無關。

相關內容