/tmp 中的 Unix 套接字在重新启动时变成目录

/tmp 中的 Unix 套接字在重新启动时变成目录

我在 raspi ( ) 上运行基于 Ubuntu 的服务器6.5.0-1015-raspi #18-Ubuntu。在此系统上,我knxd运行了 KNX 总线,将 KNX 总线暴露给我的服务器,然后在 Docker 容器中运行 Home Asssitant。knxddocker配置为 systemctl 服务。

knxd/tmp/eib配置为使用命令行参数创建 UNIX 域套接字-u /tmp/eib。当我启动服务时,这会起作用,例如,systemctl start在系统运行后使用 。

然而,重新启动后, 中有一个/tmp/eib由 拥有的目录root:root,该目录阻止knxd创建其域套接字。knxd然后(可以理解)在启动时崩溃。当我使用 手动删除目录sudo rm -rf /tmp/eib,然后systemctl restart knxdknxd设法创建正确的套接字并成功启动。

# after reboot. With this in place, knxd crashes on startup.
$ ll -d /tmp/eib
drwxr-xr-x 2 root root 4096 Apr 27 09:33 /tmp/eib/
# If I manually remove the file...
$ sudo rm -rf /tmp/eib
$ sudo systemctl restart knxd
# ... wait a bit ...
# ... then knxd comes up successfully and creates the correct file+permissions
$ ll -d /tmp/eib
srwxr-xr-x 1 knxd knxd 0 Apr 27 09:39 /tmp/eib=
# now knxd and everything depending on it works fine

如何调试谁创建了该文件?如何设置才能knxd在重新启动后成功出现?

答案1

knxdgithub 存储库位于https://github.com/knxd/knxd提到了套接字的创建位置:

“如果您使用 Debian Jessie 或其他基于 systemd 的发行版,/lib/systemd/system/knxd.socket则用于打开 knxd 侦听客户端的“标准”套接字。您不再需要旧的 -i 或 -u 选项。”

它还建议使用/run/而不是/tmp

“knxd 的 Unix 套接字永远不应该位于/tmp;默认值现在是/run/knx。如果需要,您可以添加一个-u /tmp/eib(或其他)选项,但最好修复客户端。”

相关内容