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