FTP サーバーへのアップロードが成功したかどうかを確認するためのベスト プラクティスがあるかどうか疑問に思っていました。
私が使用しているシステムには、ファイルがアップロードされるすべてのユーザーのサブディレクトリを含むアップロード ディレクトリがあります。
これらのディレクトリ内のファイルは一時的なものであり、処理されると破棄されます。
システムは、これらの各サブディレクトリとその中の新しいファイルをループし、各ファイルが 10 秒間変更されたかどうかを確認します。10 秒間変更されていない場合、システムはファイルが正常にアップロードされたと見なします。
システムが現在これらの状況を処理する方法が好きではありません。ファイルのアップロードが完了するまで待機してユーザーがアップロードを再開できるようにするのではなく、ファイルのアップロードが完了していない場合にファイルを処理して失敗するためです。アップロードに時間がかからない小さなファイルならいいかもしれませんが、ファイルが大きい場合はアップロードを再開できるようにしたいです。
また、ディレクトリとファイルのループも好きではありません。システムは高い CPU 使用率でアイドル状態になるため、ファイルが書き込まれたときにアクションをトリガーするようにpyinotifyを実装しました。ソースコードを実際に見ていないので、現在の実装よりも最適化されているとしか思えません (説明した以上のことを行います)。
ただし、ファイルが正常にアップロードされたかどうかを確認する必要があります。
xferlog を解析して、すべての完全なアップロードを取得できることはわかっています。お気に入り:
awk '($12 ~ /^i$/ && $NF ~ /^c$/){print $9}' /var/log/proftpd/xferlog
ログを追跡するだけで完全なアップロードと不完全なアップロードのパスを取得できるため、これによりpyinotifyが不要になります。
したがって、私の解決策は、実行ループで xferlog をチェックし、完全なファイルのみを処理することです。
ベストプラクティスまたはこれを行うためのより良い方法がない限り?
この方法の欠点は何ですか?
アプリを debian サーバーで実行しており、proftpd が同じサーバーにインストールされています。また、ファイルを送信するクライアントを制御することはできません。