5

特定のファイルを強制終了せずに Samba プロセスに強制的に閉じる方法はありますか?

Samba はクライアント接続ごとにプロセスを開きますが、開いているファイルを必要以上に長く保持することがあります。通常、私はプロセスを強制終了するだけで、(Windows) クライアントは次に共有にアクセスするときにプロセスを再度開きます。しかし、他のファイルを長時間積極的に読み取っていることがあり、接続全体ではなく、1つのファイルだけを「強制終了」したいのです。

編集:「net rpc file close」を試しましたが、うまくいかないようです。理由を知っている人はいますか?

編集:これは、私が見つけた同様のものについての最高の言及です。これはwin32クライアントの問題のようで、Microsoftサーバーには回避策があります。しかし、Samba はそうではありません。コマンドが機能したことを願ってnet rpc file close <fileid>います。その理由を突き止めようとします。この場合、これが唯一の有用な手順であるため、問題が解決しなかったとしても、LuckyLindy の回答を受け入れます。

4

8 に答える 8

6

これは、特に Win98 マシンから Samba に接続している場合に、システムで常に発生します。次の手順に従って解決します(おそらくあなたのものと似ています)。

  • ファイルを使用しているコンピュータを確認する (つまりlsof|grep -i <file_name>)
  • 問題のあるコンピューターからそのファイルを開いてみるか、閉じることができるプロセスがタスクマネージャーに隠れているかどうかを確認してください
  • うまくいかない場合は、ユーザーに重要なネットワーク プログラムをすべて終了してもらいます。
  • Linux からユーザーの Samba プロセスを強制終了します (つまりkill -9 <pid>) 。

もっといい方法があればいいのに!

于 2009-02-26T03:34:28.620 に答える
2

私の最初の回答には実際にはより多くの質問が含まれており、実際にはあまり役に立たなかったので、私は新しい回答を作成しています。

少し検索を行った後、Samba の最新バージョンで現在未解決のバグを見つけることができませんでした。Samba Bug Report Web サイトをチェックして、新しいバグを作成してください。これは、誰かに修正方法のアイデアを提案してもらい、開発者に問題を見てもらう最も簡単な方法です。LuckyLindy は私の以前の回答にコメントを残しており、これが 5 年前から続いている方法であり、プロジェクトはオープン ソースであり、問​​題を報告したり、パッチを提供したりすることで問題を修正するための最良の方法であると述べています。

また、メーリング リストのエントリを 1 つ見つけました: Samba Open filesposix locking=no 。構成ファイルに追加することを提案しています。保持中はロックされています。

必要に応じて、ptrace を使用してプログラムにアタッチするプログラムを作成することもできます。このプログラムは、すべてのファイルを通過し、ロックを解除して閉じます。ただし、これにより Samba が未知の状態になる可能性があり、より危険な場合があることに注意してください。

すでに述べた回避策は、回避策として定期的に samba を再起動することです。解決策ではないことはわかっていますが、一時的に機能する可能性があります。

于 2009-02-26T07:50:06.430 に答える
1

これはおそらくここで答えられます:UNIXシステムの別のプロセスからファイル記述子を閉じる方法

推測では、「net rpc file close」はおそらく機能しません。これは、Sambaにファイルを閉じるように指示するプロセス間通信が、閉じたいファイルの読み取りが完了するまで見られないためです。

于 2009-02-19T20:21:59.333 に答える
0

sambaに明示的なオプションがない場合、標準のUNIXインターフェイスを使用して開いているファイル記述子を外部で閉じることは不可能です。

于 2008-09-26T21:18:31.280 に答える
0

この場合のより良い質問はなぜですか?なぜファイルを早く閉じたいのですか?最終的にファイルを閉じるにはどのような目的が必要ですか?何を達成しようとしていますか?

于 2009-02-23T11:07:51.330 に答える
0

たまたま共有していたデバイスを簡単にアンマウントできるように、このようなことを達成する必要がありました。私はこの簡単な bash スクリプトを書きました:

#!/bin/bash
PIDS_TO_CLOSE=$(smbstatus -L | tail -n-3 | grep "$1" | cut -d' ' -f1 - | sort -u | sed '/^$/$
for PID in $PIDS_TO_CLOSE; do
    kill $PID
done

閉じるパスとして、1 つの引数を取ります。

smbclose /media/drive

その引数に一致するパス (grep による) はすべて閉じられているため、かなり具体的にする必要があります。(samba を介して開いているファイルのみが影響を受けます。) 明らかに、他のユーザーが開いたファイルを閉じるには root が必要ですが、開いているファイルに対しては正常に機能します。ファイルを強制的に閉じる場合と同様に、データが破損する可能性があることに注意してください。ファイルが非アクティブである限り、問題はありません。

かなり醜いですが、私のユースケース(マウントポイント全体を閉じる)では十分に機能します。

于 2016-03-05T09:29:22.420 に答える
0

Samba には、開いているファイルを表示して閉じるためのコマンドが用意されています。

開いているすべてのファイルを一覧表示するには:

net rpc file -U ADadmin % password

ADadminとパスワードを Windows AD ドメイン管理者の資格情報に置き換えます。これにより、ファイル ID、開いているユーザーのユーザー名、ロック状態、およびファイル名が得られます。grep を介して結果をパイプ処理することにより、結果をフィルタリングすることがよくあります。

閉じたいファイルが見つかったら、そのファイル ID 番号をコピーして、次のコマンドを使用します。

net rpc file close fileid -U ADadmin % password

于 2015-05-28T15:23:37.137 に答える
0

一般的に言えば、外部からプロセス ファイル記述子を操作することはできません。しかし、1997 年の phrack 記事で見たように、root としてもちろんそれを行うことができます: http://www.phrack.org/issues.html?issue=51&id=5#article生産体制ですが…

于 2009-02-22T22:41:33.887 に答える