NFS가 중단될 때 프로그램을 시작하려고 할 때 bash가 중단되는 것을 중지하는 방법

NFS가 중단될 때 프로그램을 시작하려고 할 때 bash가 중단되는 것을 중지하는 방법

나는 현재 겪고 있는 일이다우분투 13.10의 버그이는 일시 중지 후 컴퓨터를 다시 시작하면 네트워크 연결이 다시 시작되지 않음을 의미합니다. 여러 개의 NFS 마운트가 있고 정지 상태이기 때문에 명령줄에서 무엇이든 실행하려고 할 때마다(이 버그 보고서의 해결 방법과 같은) nmcli cli sleep false쉘이 정지됩니다. "멈춤"이란 어떤 신호(Ctrl-C, Ctrl-Z, kill 등)에도 응답하지 않는다는 의미입니다.

절대 경로(예: /usr/bin/nmcli)를 사용하면 예상대로 잘 작동합니다. 네트워크 연결을 복원하면 정지된 모든 프로세스가 재개되고 실행이 완료됩니다.

왜 이런 일이 일어나는지 혼란스러워요. 현재 의심되는 점은 bash가 NFS 마운트 디렉터리 중 하나에서 내가 실행하려는 명령을 검색하려고 한다는 것입니다. 하지만 광산에는 PATHNFS 마운트 디렉터리가 포함되어 있지 않습니다.

그래서 내 질문은 두 가지입니다. 쉘이 이런 식으로 멈추는 이유는 무엇이며 어떻게 중지할 수 있습니까?

답변1

내 경험에 따르면 Linux의 NFS 구현은 Solaris의 NFS 구현만큼 강력하지 않습니다. 특히 Linux의 NFS로 인해 장치의 프로세스가 중단될 수 있으므로 일부 프로세스가 다음 상태로 표시될 수 있습니다.

[pkearns@centos6 ~]$ ps -lp $$
F S   UID   PID  PPID  C PRI  NI ADDR SZ WCHAN  TTY          TIME CMD
0 D   500  2626  2307  0  80   0 -  1282 -      pts/1    00:00:00 bash
[pkearns@centos6 ~]$ 

두 번째 열은 D프로세스가 장치에서 정지되었음을 나타냅니다. 장치 정지는 예측할 수 없는 방식으로 시스템 전체에 전파되어 관련이 없어 보이는 프로세스를 방해할 수 있습니다.

이 시도:

ps -elf | awk '$2=="D"'

그러면 장치에 보류 중인 프로세스가 표시됩니다.

답변2

기본적으로 NFS는 하드 무중단 FS 호출을 사용합니다. 따라서 FS 작업(읽기, 쓰기, 통계 등)을 "Ctrl+C" 또는 "Ctrl+Z"할 수 없습니다.

"Ctrl+C"를 사용하려면 "NFS 공유 마운트" 옵션을 사용할 수 있습니다.정수"시스템 호출을 중단하는 기능. 다음을 사용하여 테스트할 수 있습니다: mount -o remount,intr /YOUR/MOUNTPOINT

그런 다음 /etc/fstab 파일을 편집하여 지속성 옵션을 추가합니다.

"nolock" 옵션은 단순히 여러 클라이언트의 동시 쓰기를 방지하는 데 사용되는 "파일 잠금" 방법을 비활성화합니다. I/O와는 아무런 관련이 없습니다.

"왜 중단되고 NFS 위치에 대한 참조가 없습니다"라는 질문의 경우 bashcompletion에 문제가 있거나 실제로 NFS를 테스트하기 위해 명령을 사용하는 스크립트가 있습니까?

아드리안.

답변3

클라이언트 측에서 "-o nolock" 옵션을 사용하면 문제가 해결될 수도 있습니다.

답변4

일반적인 원인은 프로세스가 NFS 공유를 기다리는 동안 시간이 초과되었기 때문입니다(일반적으로 전혀 발생하지 않음). 셸에서 가장 가능성이 높은 원인은 PATH디렉터리 중 하나 입니다.앞으로실제로 실행 파일이 포함된 파일은 액세스할 수 없는 NFS 공유에 있습니다(알았듯이 실제로 그렇습니다).

관련 정보