Использование inotify-tools и ruby ​​для отправки файлов в облачные файлы - PullRequest
0 голосов
/ 30 марта 2010

Я написал несколько сценариев для отслеживания изменений в каталоге загрузки, затем захватил загруженный / измененный файл и отправил его в облачные файлы с помощью сценария ruby. Все это работает хорошо в 95% случаев, единственное исключение состоит в том, что иногда происходит сбой ruby ​​с исключением «файл не существует».

Я предполагаю, что скрипт 'push' для ruby ​​вызывается до того, как файл находится на 100% в новом месте, поэтому скрипт вызывается немного преждевременно.

Я попытался добавить небольшую функцию в мой скрипт, чтобы проверить, существует ли файл, если нет, спит 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% стабильным (в конце концов, я буду обслуживать загруженные файлы из облачных файлов, поэтому мне нужно убедиться, что он идеален)

Заранее спасибо!

РЕДАКТИРОВАТЬ - решено !! - Я наблюдаю за событием 'delete' ... Итак, этот скрипт запускается, когда локальные файлы были удалены, которых не существует. Дерр. :)

Ответы [ 2 ]

1 голос
/ 30 марта 2010

Ваша функция вызывает себя рекурсивно без выхода. Попробуйте изменить его, чтобы вместо него использовать цикл while.

1 голос
/ 30 марта 2010

Вы убедились, что это не что-то глупое, как пробел в загруженном файле? Попробуйте добавить кавычки вокруг параметров, переданных в ваш скрипт!

...