<長話短說>
我正在基於目前的 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=writeback
和nobarrier
1 的性能。
</長話短說>
所以我的問題歸結為一句話是:
當系統實際關閉時,不具有Conflicts=
且Before=
相依性的systemd 服務會發生什麼情況?shutdown.target
1 這是經過深思熟慮的工程權衡,根據雲端提供者的 SLA 和一系列效能測試的結果進行評估,並且與問題的本質完全無關。