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ストレージを作成する方法を見つけようとしています。

2番目の編集:

/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 マウントポイント「展示してる?

おすすめ記事