有沒有一種安全的方法可以在相關服務運行之前自動刪除雜散的 unix-socket 檔案?

有沒有一種安全的方法可以在相關服務運行之前自動刪除雜散的 unix-socket 檔案?

我在 Ubuntu 18.04 上從 Supervisor 運行 Daphne,可以--unix-socket選擇綁定到 Unix 套接字而不是 TCP 主機/連接埠:

command=daphne --unix-socket /home/project/run/daphne.sock project.asgi:application

電源故障後,daphne.sock留下了一個檔案實例,重新啟動後 Daphne 拒絕啟動,直到我手動刪除有問題的檔案。

有沒有辦法在管理程式運行之前在系統啟動時安全地刪除該檔案?

我知道這不是 Daphne 特有的問題,並且可能會影響 PostgreSQL 等其他元件,因此任何適合在主管或 systemd 啟動服務之前清理文件的建議將不勝感激

答案1

使用tmpfs,例如在裡面建立文件/dev/shm

它旨在顯示為已安裝的檔案系統,但儲存在揮發性記憶體而不是持久性儲存設備。

[強調我的]

在我的 Debian 中/runtmpfs我可以看到很少有工具在那裡創建了它們的套接字。根據FHS /run是系統範圍服務創建的套接字的好地方。

運行時變數資料:自上次啟動以來正在運行的系統的信息,例如當前登入的使用者和正在運行的守護程序。該目錄下的檔案必須在引導過程開始時刪除或截斷;但對於提供此目錄作為臨時檔案系統 (tmpfs) 的系統來說,這不是必需的。

在我的 Debian 中,/run屬於 root,其模式位(權限)是rwxr-xr-x.普通用戶無法從中受益。

另一方面/dev/shmrwxrwxrwt,任何人都可以使用它。但由於它是“公共土地”(如/tmp),因此很少出現問題。名稱衝突的可能性就是其中之一。兩個用戶可能會互相干擾,即使他們的意圖完全無害。

然後有/run/user/$uid,也可表示為tmpfs

用於儲存該使用者運行進程所使用的檔案。 [...]
該目錄位於系統本地,只能由目標使用者存取。因此,希望在本地儲存文件的應用程式不再需要擔心存取控制。

相關內容