使用inotify-tools和ruby将上传内容推送到云文件

时间:2010-03-30 08:17:15

标签: ruby bash file cloud inotify

我编写了一些脚本来监控上传目录中的更改,然后捕获上传/更改的文件并使用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上传的文件,所以我需要确保它完美)

提前致谢!

编辑 - 已解决!! - 我正在观看'删除'事件...因此,当本地文件被删除时,此脚本将被触发,而不存在。德尔。 :)

2 个答案:

答案 0 :(得分:1)

您是否确定上传文件中的空格并不愚蠢?尝试在传递给脚本的参数周围添加引号!

答案 1 :(得分:1)

您的函数以递归方式调用自身而不退出。尝试将其更改为使用while循环。