Warum läuft inotifywait -m mehrmals? (Endlosschleife)

461
Andy

Ich habe ein Git- post-receiveSkript, das so aussieht:

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

Und dann habe ich ein anderes Skript, das ich als Root verwenden möchte, um das git-deployVerzeichnis so zu überwachen, dass ich die JAR-Dateien an den richtigen Stellen mit den richtigen Berechtigungen bereitstellen kann:

#!/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=$ svcname=$ echo $svcname install -o foo -g foo -m 600 "$f" "$STAGING_DIR/" echo "Installed $f to $STAGING_DIR" done 

Bei einem einzelnen Upload wird der Inhalt der While-Schleife jedoch aus irgendeinem Grund immer wieder neu angezeigt, wodurch eine unbegrenzte Ausgabe erfolgt. Was mache ich falsch?

Haftungsausschluss: Ich bin ein Softwareentwickler, kein Administrator. Bash ist (wahrscheinlich offensichtlich) nicht mein Forté.

0

1 Antwort auf die Frage

1
Cyrus

Von man inotifywait:

-m, --monitor : Statt nach dem Empfang eines einzelnen Ereignisses zu beenden, führen Sie das Programm unbegrenzt aus . Das Standardverhalten ist das Beenden nach dem ersten Ereignis.

Vielen Dank. Ich schätze, ich habe es falsch verstanden, als ich es zum ersten Mal las. Ich verstand es so, dass es auf unbestimmte Zeit blockiert werden würde und nach Ereignissen Ausschau hielt und (für meine Pipe) für jedes Mal, wenn ein Anlegen / Ändern angezeigt wird. Andy vor 6 Jahren 0