Linux 커널이 쓰기 위해 열린 파일을 실행하게 하거나 "텍스트 파일 사용 중" 오류를 수정하는 방법

Linux 커널이 쓰기 위해 열린 파일을 실행하게 하거나 "텍스트 파일 사용 중" 오류를 수정하는 방법

NFS를 사용하여 서버의 파일을 편집합니다. 파일이 셔뱅 라인이 포함된 스크립트인 경우 이를 실행할 때마다 저장 후 약 5초 동안 "텍스트 파일 사용 중" 오류가 발생합니다.

다음과 같이 파일을 vi(4.19 커널)에서 열면 동일한 문제가 재현될 수 있습니다.

:>test.sh
chmod +x test.sh
vi test.sh
# Ctrl-Z to suspend vi
./test.sh
# text file busy: ./test.sh

5.7 커널에서 위의 vi 예제는 오류를 생성하지 않지만 5.7에서 5.7 시스템으로의 NFS 쓰기는 각 저장 후 5초 동안 여전히 "텍스트 파일 사용 중" 오류를 생성합니다.

모든https://stackoverflow.com/questions/16764946/what-generates-the-text-file-busy-message-in-unix스크립트를 실행하는 바이너리를 명시적으로 호출하여 오류를 해결할 수 있습니다.

bash test.sh

나는 이것을 호출하는 스크립트를 작성할 수 있다고 믿으며 e인수에 의해 제공된 경로를 열고 파일이 shebang으로 시작하는지 확인하고 그렇다면 shebang 줄을 구문 분석하고 shebang에서 바이너리를 수동으로 호출합니다.

e ./test.sh

그러나 이로 인해 질문이 생깁니다. 운영 체제에 대해 얼마를 지불하고 있습니까?

쓰기 위해 열린 파일을 실행하도록 Linux를 어떻게 구성합니까?

5.7 커널 소스를 grep'd했지만 ETXTBUSY결과가 나오지 않았습니다.

또는 덜 일반적인 해결 방법으로NFS에 쓰기 작업을 약 5초 동안 열어두는 대신 쓰기 중인 파일을 즉시 닫도록 하려면 어떻게 해야 합니까?

편집하다:

의견에 따르면 vi(더 정확하게는 nvi)의 문제는 다음과 같습니다.이것Debian의 1.81.6-16에서 수정되었습니다(내 4.19 시스템에는 1.81.6-15가 있고 내 5.7 시스템에는 1.81.6-16이 있습니다). 텍스트 파일 사용 중 오류를 생성하지 않고 NFS 저장을 만드는 방법을 찾으려고 계속 노력 중입니다.

두 번째 편집:

/etc/exports서버에서:

/home/w 10.0.9.0/24(rw,insecure)

다음과 함께 설치됨 -o soft,intr:

serene:/home/w on /mnt/speed type nfs4 (rw,relatime,vers=4.2,rsize=1048576,wsize=1048576,namlen=255,soft,proto=tcp,timeo=600,retrans=2,sec=sys,clientaddr=10.0.9.153,local_lock=none,addr=10.0.2.2)

서버 패키지(Devuan 테스트):

serene% dpkg -l|grep nfs
ii  libnfsidmap2:amd64                   0.25-5.1                            amd64        NFS idmapping library
ii  nfs-common                           1:1.3.4-4                           amd64        NFS support files common to client and server
ii  nfs-kernel-server                    1:1.3.4-4                           amd64        support for NFS kernel server

현재 문제를 재현할 수 없는 작업 클라이언트의 클라이언트 패키지(Devuan 테스트):

averagest% dpkg -l|grep nfs
ii  libnfsidmap2:amd64                   0.25-5.1                           amd64        NFS idmapping library
ii  nfs-common                           1:1.3.4-4                          amd64        NFS support files common to client and server

답변1

아직 논평할 수는 없지만 귀하의 환경에 대한 보다 구체적인 정보를 제공해 주실 수 있습니까?

나는 당신이 보고 있는 동작을 재현할 수 없습니다. 예를 들어, /test에 NFS 파일 시스템이 마운트되어 있습니다. 다음 명령을 실행하면 5초 지연 없이 즉시 반환됩니다.

$ cd /test
$ vi xx; chmod 755 xx; ./xx
Tue Sep  8 17:45:17 EDT 2020

내가 xx에 넣은 것은 다음과 같습니다.

#!/bin/sh
date

또한 "vi xx" 및 CTRL-Z를 눌러 일시 중지하면 지연이나 오류가 없습니다.

$ vi xx
(CTRL-Z)
[1] + Stopped                  vi xx
$ ./xx
Tue Sep  8 17:51:01 EDT 2020

테스트 중입니다: CentOS Linux 버전 7.7.1908. NFS가 Linux 간에 다르게 동작할 것이라고는 기대하지 않지만 확실히 알 수는 없습니다.

nvi 대신 vim을 사용하면 동작이 바뀌나요?

"그렙 마운트"는 무엇을 의미합니까?nfs 마운트 지점" 전시하다?

관련 정보