我编写了一些脚本来监控上传目录中的更改,然后捕获上传/更改的文件并使用ruby脚本将其推送到云文件。这一切在95%的情况下运行良好,唯一的例外是,偶尔,ruby会因“文件不存在”异常而失败。
我假设在文件在新位置100%之前调用了ruby'push'脚本,因此脚本被过早调用了。
我尝试在我的脚本中添加一个小函数来检查文件是否存在,如果不存在,请先睡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%稳定(最终,我将提供从云端FIles上传的文件,所以我需要确保它完美)
提前致谢!
编辑 - 已解决!! - 我正在观看'删除'事件...因此,当本地文件被删除时,此脚本将被触发,而不存在。德尔。 :)
答案 0 :(得分:1)
您是否确定上传文件中的空格并不愚蠢?尝试在传递给脚本的参数周围添加引号!
答案 1 :(得分:1)
您的函数以递归方式调用自身而不退出。尝试将其更改为使用while
循环。