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.
Ich habe ein Git- post-receive
Skript, 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-deploy
Verzeichnis 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é.
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.