![是否有一种安全的方法可以在运行相关服务之前自动删除杂散的 unix-socket 文件?](https://linux22.com/image/1586442/%E6%98%AF%E5%90%A6%E6%9C%89%E4%B8%80%E7%A7%8D%E5%AE%89%E5%85%A8%E7%9A%84%E6%96%B9%E6%B3%95%E5%8F%AF%E4%BB%A5%E5%9C%A8%E8%BF%90%E8%A1%8C%E7%9B%B8%E5%85%B3%E6%9C%8D%E5%8A%A1%E4%B9%8B%E5%89%8D%E8%87%AA%E5%8A%A8%E5%88%A0%E9%99%A4%E6%9D%82%E6%95%A3%E7%9A%84%20unix-socket%20%E6%96%87%E4%BB%B6%EF%BC%9F.png)
我在 Ubuntu 18.04 上的主管运行 Daphne,并选择--unix-socket
绑定到 Unix 套接字而不是 TCP 主机/端口:
command=daphne --unix-socket /home/project/run/daphne.sock project.asgi:application
断电后,文件实例daphne.sock
残留,重启后 Daphne 拒绝启动,直到我手动删除有问题的文件。
有没有办法在运行主管之前在系统启动时安全地删除该文件?
我理解这不是 Daphne 特有的问题,并且会影响 PostgreSQL 等其他组件,因此,任何适合在由 Supervisor 或 systemd 启动服务之前清理文件的建议都将非常感激
答案1
使用tmpfs
,例如在里面创建文件/dev/shm
。
它旨在显示为已安装的文件系统,但存储在易失性存储器而不是持久存储设备。
[重点是我的]
在我的 Debian 中/run
也是如此tmpfs
,我可以看到很少有工具在那里创建了它们的套接字。根据跳频 /run
是系统范围服务创建的套接字的好地方。
运行时变量数据:自上次启动以来运行系统的信息,例如当前登录的用户和正在运行的守护进程。此目录下的文件必须在启动过程开始时删除或截断;但在将此目录作为临时文件系统 (tmpfs) 提供的系统上,这不是必需的。
在我的 Debian 中/run
属于 root,其模式位(权限)为rwxr-xr-x
。普通用户无法从中受益。
另一方面/dev/shm
,rwxrwxrwt
任何人都可以使用它。但由于它是“公共土地”(如/tmp
),因此很少出现问题。名称冲突的可能性就是其中之一。即使两个用户的意图完全无害,他们也可能会互相干扰。
然后是/run/user/$uid
,也作为tmpfs
:
用于存储该用户正在运行的进程所使用的文件。[…]
此目录是系统本地的,只有目标用户可以访问。因此,希望在本地存储文件的应用程序不再需要担心访问控制。