0

アップロード ディレクトリの変更を監視し、アップロード/変更されたファイルをキャプチャして、Ruby スクリプトを使用してクラウド ファイルにプッシュするスクリプトをいくつか作成しました。これは 95% の確率で問題なく動作しますが、唯一の例外は、ときどき ruby​​ が「ファイルが存在しません」という例外で失敗することです。

ファイルが新しい場所に 100% 配置される前に ruby​​ の「プッシュ」スクリプトが呼び出されていると想定しているため、スクリプトは少し時期尚早に呼び出されています。

スクリプトに小さな関数を追加して、ファイルが存在するかどうかを確認してみました。存在しない場合は、5 をスリープしてから再試行しますが、これは雪だるま式に発生し、最終的には終了します。次に、すべての呼び出しにスリープ 2 を追加しましたが、「ファイルが存在しません」というエラーが再び発生するため、役に立ちませんでした。

#!/bin/sh

function checkExists {
    if [ ! -e "$1" ]
    then
            sleep 5
            checkExists $1
    fi
}

inotifywait -mr --timefmt '%d/%m/%y-%H:%M' --format '%T %w %f' -e modify,moved_to,create,delete /home/skylines/html/forums/uploads | while read date dir file; do
    cloudpath=${dir:20}${file}
    localpath=${dir}${file}
    #checkExists $localpath
    sleep 2
    ruby /home/cbiggins/bin/pushToCloud.rb skylinesaustralia.com $cloudpath $localpath
    echo "${date} ruby /home/cbiggins/bin/pushToCloud.rb skylinesaustralia.com $cloudpath $localpath" >> /var/log/pushToCloud.log
done

これを 100% 安定させるための提案を探しています (最終的には、Cloud FILE からアップロードされたファイルを提供するので、完全であることを確認する必要があります)。

前もって感謝します!

編集 - 解決しました!! - 「削除」イベントを監視しています... このスクリプトは、存在しないローカル ファイルが削除されたときに実行されます。デル。:)

4

2 に答える 2

1

アップロードされたファイルのスペースとして、それがばかげたものではないことを確認しましたか?スクリプトに渡されたパラメーターを引用符で囲んでみてください。

于 2010-03-30T08:46:59.030 に答える
1

あなたの関数は、出口なしで再帰的にそれ自体を呼び出します。while代わりにループを使用するように変更してみてください。

于 2010-03-30T11:26:31.880 に答える