我在 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 中/run
,tmpfs
我可以看到很少有工具在那裡創建了它們的套接字。根據FHS /run
是系統範圍服務創建的套接字的好地方。
運行時變數資料:自上次啟動以來正在運行的系統的信息,例如當前登入的使用者和正在運行的守護程序。該目錄下的檔案必須在引導過程開始時刪除或截斷;但對於提供此目錄作為臨時檔案系統 (tmpfs) 的系統來說,這不是必需的。
在我的 Debian 中,/run
屬於 root,其模式位(權限)是rwxr-xr-x
.普通用戶無法從中受益。
另一方面/dev/shm
是rwxrwxrwt
,任何人都可以使用它。但由於它是“公共土地”(如/tmp
),因此很少出現問題。名稱衝突的可能性就是其中之一。兩個用戶可能會互相干擾,即使他們的意圖完全無害。
然後有/run/user/$uid
,也可表示為tmpfs
:
用於儲存該使用者運行進程所使用的檔案。 [...]
該目錄位於系統本地,只能由目標使用者存取。因此,希望在本地儲存文件的應用程式不再需要擔心存取控制。