디스플레이 스탠드가 매달리는 것을 방지하는 방법은 무엇입니까?

디스플레이 스탠드가 매달리는 것을 방지하는 방법은 무엇입니까?

NFS 및 CIFS 공유 폴더를 관리하기 위해 웹 프런트 엔드를 구현하고 있습니다. 한 섹션에는 모든 IP 주소에서 사용 가능한 공유 포인트(내보내기)가 표시됩니다.

백엔드는 SMB/CIFS 공유를 쿼리하는 데 사용되며 NFS 공유를 쿼리하는 smbclient -L <ip> -U <user>데 사용됩니다 .showmount -e <ip>

그러나 showmount대상 서버가 모든 유형의 방화벽(Windows, Mac 또는 Linux)을 실행 중인 경우 중단됩니다. (이 SE/SU 게시물은여기그리고여기NFS에 방화벽 문제가 있다고 언급함)

기존 시스템과 존재하지 않는 시스템에서 데모 설치를 테스트했습니다. 다음 의 여러 조합을 테스트합니다 showmount -e <ip>.

Machine NFSD     Firewall   Result
Exists  Stopped  Off        clnt_create: RPC: Unable to receive
Exists  Stopped  On         HANGS
Exists  Running  On         HANGS
Exists  Running  Off        returns list of exports
None    n/a      n/a        clnt_create: RPC: Unable to receive

정지 상태에서는 (-9)로만 사망 showmount할 수 있습니다 . SIGKILL우리는 사용하려고timeout잠시 후 포기하지만 역시 멈춥니다.

다른 터미널에서 실행하면 strace멈췄음을 알 수 있습니다.connect

$ strace -p 63552
strace: Process 63552 attached
connect(4, {sa_family=AF_INET, sin_port=htons(111), sin_addr=inet_addr("192.168.2.10")}, 16

질문showmount이 시나리오에서 어떻게 매달리지 않고 사용할 수 있습니까 ?

한 가지 아이디어는 먼저 NFS IP: 포트에 대한 연결을 열려고 시도한 다음 성공하면 실행되는 프로그램을 작성하는 것입니다 showmount. 그런데 다른 방법이 있나요?

백엔드는 Centos 8에서 실행됩니다.

답변1

timeout이 신호를 사용하도록 명령에 지시할 수 있습니다 ( SIGKILL참조 man timeout). 이는 showmount다음과 같은 경우에 매우 효과적으로 작동합니다.

timeout --signal KILL 3s showmount -e remoteNFSServer

관련 정보