0

我编写了一些脚本来监视上传目录的更改,然后捕获上传/更改的文件并使用 ruby​​ 脚本将其推送到云文件。这在 95% 的情况下都运行良好,唯一的例外是 ruby​​ 偶尔会因“文件不存在”异常而失败。

我假设在文件 100% 位于其新位置之前调用了 ruby​​ 'push' 脚本,因此该脚本被过早地调用。

我尝试在我的脚本中添加一个小函数来检查文件是否存在,如果不存在,睡眠 5 然后再试一次,但这似乎滚雪球并最终死亡。然后我只是在所有呼叫中添加了 sleep 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 文件提供上传的文件,所以我需要确保它完美)

提前致谢!

编辑 - 解决了!!- 我正在观看“删除”事件......所以,当本地文件被删除时,这个脚本正在触发,这些文件不存在。错了。:)

4

2 回答 2

1

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

于 2010-03-30T11:26:31.880 回答
1

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

于 2010-03-30T08:46:59.030 回答