5

FTP サーバーへのアップロードが成功したかどうかを確認するためのベスト プラクティスがあるかどうか疑問に思っていました。

私が使用しているシステムには、ファイルがアップロードされるすべてのユーザーのサブディレクトリを含むアップロード ディレクトリがあります。

これらのディレクトリ内のファイルは一時的なものであり、処理されると破棄されます。

システムは、これらの各サブディレクトリとその中の新しいファイルをループし、各ファイルが 10 秒間変更されたかどうかを確認します。10 秒間変更されていない場合、システムはファイルが正常にアップロードされたと見なします。

システムが現在これらの状況を処理する方法が好きではありません。ファイルのアップロードが完了するまで待機してユーザーがアップロードを再開できるようにするのではなく、ファイルのアップロードが完了していない場合にファイルを処理して失敗するためです。アップロードに時間がかからない小さなファイルならいいかもしれませんが、ファイルが大きい場合はアップロードを再開できるようにしたいです。

また、ディレクトリとファイルのループも好きではありません。システムは高い CPU 使用率でアイドル状態になるため、ファイルが書き込まれたときにアクションをトリガーするようにpyinotifyを実装しました。ソースコードを実際に見ていないので、現在の実装よりも最適化されているとしか思えません (説明した以上のことを行います)。

ただし、ファイルが正常にアップロードされたかどうかを確認する必要があります。

xferlog を解析して、すべての完全なアップロードを取得できることはわかっています。お気に入り:

awk '($12 ~ /^i$/ && $NF ~ /^c$/){print $9}' /var/log/proftpd/xferlog

ログを追跡するだけで完全なアップロードと不完全なアップロードのパスを取得できるため、これによりpyinotifyが不要になります。

したがって、私の解決策は、実行ループで xferlog をチェックし、完全なファイルのみを処理することです。

ベストプラクティスまたはこれを行うためのより良い方法がない限り?

この方法の欠点は何ですか?

アプリを debian サーバーで実行しており、proftpd が同じサーバーにインストールされています。また、ファイルを送信するクライアントを制御することはできません。

4

2 に答える 2

8

proftpd のドキュメントを見ると、http: //www.proftpd.org/docs/directives/linked/config_ref_HiddenStores.html が表示されます。

HiddenStores ディレクティブにより、2 段階のファイル アップロードが可能になります。ファイルは「.in.filename」としてアップロードされます。アップロードが完了すると、名前が「ファイル名」に変更されます。これにより、ある程度の原子性が提供され、1) 不完全なアップロードと 2) アップロード中のファイルが使用されるのを防ぐのに役立ちます。

これは、proftpd がすべての作業を処理するため、proftpd を制御できる場合に問題を解決するための「より良い方法」である必要があります。開始されないファイルはすべて、.in.アップロードが完了したと見なすことができます。.in.*また、どこかの片付けスクリプトで任意の期間非アクティブになった後、孤立ファイルを安全に削除することもできます。

于 2012-09-09T13:47:04.510 に答える
0

pure-ftpd インストールがオプション付きでコンパイルされている場合は、pure-uploadscript を使用でき --with-uploadscriptます。

各アップロードが完全に終了した後に、指定されたスクリプトを起動するために使用されます。

  1. CallUploadScript を「はい」に設定します
  2. のようなコマンドでスクリプトを作成しますtouch /tmp/script.sh
  3. その中にコードを書きます。私の例では、スクリプトはファイルの名前を変更し、ファイル名の前に「.completed」を追加します。

    #!/bin/bash fullpath=$1 filename=$(basename "$1") dirname=${fullpath%/*} mv "$fullpath" "$dirname/completed.$filename"

  4. 実行chmod 755 /tmp/script.shして、pure-uploadscript でスクリプトを実行可能にする

  5. 次に、コマンドを実行しますpure-uploadscript -B -r /etc/pure-ftpd/uploadscript.sh

/tmp/script.shアップロードが完了するたびに起動されるようになりました。

于 2015-03-10T01:17:07.587 に答える