/tmp의 Unix 소켓은 재부팅 시 디렉터리가 됩니다.

/tmp의 Unix 소켓은 재부팅 시 디렉터리가 됩니다.

저는 raspi() 에서 Ubuntu 기반 서버를 실행하고 있습니다 6.5.0-1015-raspi #18-Ubuntu. 이 시스템에서는 knxdKNX 버스를 실행하고 KNX 버스를 내 서버에 노출한 다음 Docker 컨테이너 내에서 Home Assitant를 실행했습니다. knxd그리고 dockersystemctl 서비스로 구성됩니다.

knxd/tmp/eib명령줄 매개변수를 사용하여 UNIX 도메인 소켓을 생성하도록 구성합니다 -u /tmp/eib. 예를 들어 systemctl start시스템이 실행된 후 서비스를 시작할 때 작동합니다 .

그러나 재부팅 후 해당 도메인 소켓이 생성되지 않도록 하는 소유 /tmp/eib의 디렉터리 가 있습니다. 그런 다음 (당연히) 시작 시 충돌이 발생합니다. 디렉토리를 수동으로 삭제하면 올바른 소켓이 생성되고 성공적으로 시작됩니다 .root:rootknxdknxdsudo rm -rf /tmp/eibsystemctl 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 또는 기타 시스템 기반 배포판을 사용하는 경우 /lib/systemd/system/knxd.socketknxd 청취 클라이언트를 열기 위한 "표준" 소켓입니다. 더 이상 이전 -i 또는 -u 옵션이 필요하지 않습니다."

/run/대신 다음 을 사용하는 것이 좋습니다 /tmp.

"knxd용 Unix 소켓은 에 있으면 안 됩니다 . /tmp기본값은 이제 입니다 /run/knx. 필요한 경우 하나 -u /tmp/eib또는 다른 옵션을 추가할 수 있지만 클라이언트를 수정하는 것이 좋습니다."

관련 정보