アップロード ディレクトリの変更を監視し、アップロード/変更されたファイルをキャプチャして、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 からアップロードされたファイルを提供するので、完全であることを確認する必要があります)。
前もって感謝します!
編集 - 解決しました!! - 「削除」イベントを監視しています... このスクリプトは、存在しないローカル ファイルが削除されたときに実行されます。デル。:)