9

Windowsサーバー上の共有フォルダーに書き込まれたビデオファイル(数MBから数GBの範囲)を取得するスクリプトを作成しようとしています。

理想的には、スクリプトはLinuxマシンで実行され、15〜120秒ごとなどの間隔でWindows共有フォルダーを監視し、共有フォルダーへの書き込みが完全に終了したファイルをFTPサイトにアップロードします。

ファイルが共有に完全に書き込まれたかどうかを確実に知ることができる基準を決定できませんでした。Windowsは、ファイルのサイズ全体に対して共有の場所を予約しているようです(したがって、ファイルサイズは増分されません)。変更された日付は、ファイルが書き込みを開始した時刻のようですが、ファイルとしては増分されません。成長し続けます。LSOFとfuserはファイルを認識していないようで、Sambaツールでさえファイルがロックされていることを示していないようですが、正しいオプションでマウントしていないためかどうかはわかりません。ファイルを開いたり名前を変更したりしてみましたが、「テキストファイルビジー」エラーコードが最適ですが、ファイルのコピーに大きな遅延が発生するようです。

私は書き込みプロセスをまったく制御できません。これは数十台のマシンで実行され、ネットワーク共有へのWindowsOSファイルのコピーのみで構成されます。

Windowsサーバーで共有オプションを制御でき、Linuxボックスを完全に制御できます。FTP経由でアップロードする前に、ファイルの書き込みが完全に終了したことを確認できるWindows CIFS共有のロックをチェックする方法はありますか?または、Linuxサーバーにローカルで共有を所有させる唯一の可能な解決策はありますか?

編集

tldr、私は本当にcifsにマウントされた共有で機能する「lsof」のようなものに相当するものを探しています。どれだけ低レベルでもかまいませんが、Pythonから呼び出すことができれば理想的です。到着する前に共有を移動したり、ファイルの名前を変更したりできません。

4

2 に答える 2

1

私は以前にこの問題を抱えていました。私の方法が最善の方法であるかどうかはわかりませんが、それは間違いなくハッキーな修正ですが、スリープ間隔とファイルサイズのチェックを使用しました(ファイルが書き込まれている場合、ファイルが大きくなると予想されます)に...)

私の場合、ファイルが書き込まれていないだけでなく、Windows共有にも書き込まれていないことを知りたかった...

私のコードは;

while [ "$(ls -la "$REMOTE_CSV_DIR"; sleep 15)" != "$(ls -la "$REMOTE_CSV_DIR")" ]; do
    echo "File writing seems to be ocuring, waiting for files to finish copying..."
done

(ls -la にはファイル サイズがビット単位で含まれます...)

于 2013-01-23T21:32:12.040 に答える
1

これはどうですか?:

この目的のために予約されている実際の Linux ディレクトリを指すように Windows 共有を変更します。次に、単純な Linux スクリプトを使用して、そこにあるファイルにライターが含まれているかどうかを簡単に判断できます。書き込まれていないファイルがある場合は、それを Windows フォルダーにコピーします (必要な場合)。

于 2013-01-23T21:37:55.090 に答える