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