Подавить или предотвратить повторяющиеся события inotifywait?
В настоящее время inotifywait
смотрит папки git сервера. Конец он излучает только когда конкретный файл изменен. Проблема в том, что когда изменения передаются на сервер git, inotifywait
срабатывает несколько раз. Я не знаю почему.
Итак, как я могу сделать следующее: предотвратить inotifywait
делать дубликаты?
Я думал об алгоритме: при первом запуске -> сценарий сна, чтобы он не сканировал следующие изменения в течение 5 секунд -> сценарий возобновления. Но это звучит идиотски... Можете ли вы помочь мне достичь этого? Спасибо!!
2 ответа
Вот как я решил это для своих нужд. Я отслеживаю путь, чтобы он автоматически компилировался при синтаксических ошибках. И мне надоели повторяющиеся события, испускаемые inotifywait
, Добавить syncheck
функция в вашем .bashrc
:
syncheck() {
declare -A fileMap
inotifywait --exclude .swp --format '%w%f' -e modify,create -m -r -q $* | \
while read FILE; do
es=$(date +'%s')
case "$FILE" in
*.hs)
if [[ ${fileMap[$FILE]} != $es ]];then
sdiff=$((es-${fileMap[$FILE]:-0}))
fileMap[$FILE]=$es
((sdiff < 3)) && continue
ghc -fno-code $FILE
echo "---------------------------------------------"
fi
;;
esac
done
}
Как пользоваться:
cd ~/src/proj/
. ~/.bashrc
syncheck .
В другом терминале измените или создайте Haskell
файл в ~/src/proj/
место нахождения. syncheck
цикл while обнаружит это и автоматически скомпилирует на наличие синтаксических ошибок.
Ключевой идеей этого решения по подавлению дубликатов событий является секунда эпохи Unix и словарь bash.
Как я уже упоминал в вашем другом вопросе, вы можете сначала настроить ловушку после получения, которая будет проверять репо для вас всякий раз, когда происходит отправка на сервер Git.
Вы можете не только проверить свои inotify
функция при мониторинге тех файлов, измененных при оформлении заказа, но вы можете даже не использовать inotify
на всех, и с помощью ловушки, чтобы вызвать ваше уведомление.post-receive
Hook может перечислить файлы, и вы можете запустить свое уведомление только для определенных файлов.