Centos

Linux 服務在重新啟動/關閉期間停止的順序

  • May 31, 2019

在執行 Centos 7.5 的 KVM VM 上,我有一個正在執行的服務,該服務寫入 NFS 掛載的文件系統。發出關閉或重新啟動時,服務將引發異常,指示它無權寫入此 NFS 文件系統上的目錄。相反,如果我使用 systemctl 手動停止服務,則服務正常完成,即不會引發異常。由於異常,我推測,在我的服務可以將其最終數據寫入 NFS 掛載之前,作業系統正在關閉 NFS 服務,從而刪除掛載的捲。當服務嘗試寫入此位置時,它無法寫入,因為該目錄已消失。NFS 掛載是否會在使用者服務被告知停止之前被刪除?

奇怪的是我有兩個版本的虛擬機。這就是問題所在,它有一個 LUKS 加密的根分區。另一個 VM 具有相同的程式碼,但在未加密的分區上執行。兩者的作業系統相同。我不明白為什麼這會刺激這個問題,但這是 VM 中的唯一區別。

有什麼方法可以確保我的服務在 NFS 被殺死之前完成?

Systemd 盡可能並行啟動和停止服務。與預系統化的 Linux 發行版相比,這就是它如何快速地做到這兩點。當服務需要其他服務或資源時,需要在該服務的單元文件中明確聲明,以便 systemd 可以正確排序它們。如果不這樣做,您將無法可靠地預測您的服務所需的資源是否會在您的服務仍在嘗試使用它時變得不可用。

在您的特定情況下,您可以使用RequiresMountsFor=指定該單元需要在給定安裝點安裝文件系統。這在本[Unit]節中。

[Unit]
RequiresMountsFor=/path/to/mountpoint

聲明後,您的服務將在文件系統掛載到該掛載點之前不會啟動,並且會在文件系統解除安裝之前停止。

引用自:https://serverfault.com/questions/969691