Por que o inotifywait -m está rodando várias vezes? (Loop infinito)

0

Eu tenho um script git post-receive que se parece com isso:

#!/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

Depois, tenho outro script que estou tentando usar (como root) para assistir ao diretório git-deploy , para que eu possa implantar os arquivos jar em seu devido lugar, com as permissões corretas:

#!/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

Mas, por algum motivo, em um único upload, o conteúdo do loop while é executado repetidamente, produzindo a saída indefinidamente. O que estou fazendo errado?

Disclaimer: Eu sou um desenvolvedor de software, não um administrador. Bash é (provavelmente obviamente) não meu strong.

    
por Andy 27.01.2018 / 14:30

1 resposta

1

De man inotifywait :

-m, --monitor: Instead of exiting after receiving a single event, execute indefinitely. The default behaviour is to exit after the first event occurs.

    
por 27.01.2018 / 19:19