Почему inotifywait -m работает несколько раз? (бесконечный цикл)
У меня есть мерзавец post-receive
скрипт, который выглядит так:
#!/bin/bash
export GIT_WORK_TREE=/home/git/worktree
mkdir -p $GIT_WORK_TREE
while read oldrev newrev refname
do
# ensure the working copy is set up correctly
git checkout -f master || exit 1
git reset --hard $newrev || exit 1
cd $GIT_WORK_TREE
# build the apps
./gradlew bootRepackage
# install the jars
cp foo-web/build/libs/foo-web.jar /opt/foo-staging/git-deploy/
cp foo-scheduler/build/libs/foo-scheduler.jar /opt/foo-staging/git-deploy/
done
echo 2
exit 0
И тогда у меня есть другой сценарий, который я пытаюсь использовать (как root) для просмотра git-deploy
каталог, чтобы я мог развернуть файлы JAR в нужном месте, с необходимыми разрешениями:
#!/bin/bash
DEPLOY_FROM_DIR=/opt/foo-staging/git-deploy
STAGING_DIR=/opt/foo-staging
/usr/bin/inotifywait -m -q --event "MODIFY,CREATE" --format '%w%f' "$DEPLOY_FROM_DIR" |
while read f; do
noext=${f%.jar}
svcname=${noext/foo-/foo-staging-}
echo $svcname
install -o foo -g foo -m 600 "$f" "$STAGING_DIR/"
echo "Installed $f to $STAGING_DIR"
done
Но по какой-то причине при однократной загрузке содержимое цикла while повторяется снова и снова, создавая вывод бесконечно долго. Что я делаю неправильно?
Отказ от ответственности: я разработчик программного обеспечения, а не администратор. Баш (вероятно, очевидно) не мое счастье.
1 ответ
От man inotifywait
:
-m, --monitor: вместо выхода после получения одного события, выполнять неопределенно долго. Поведение по умолчанию - выход после первого события.