왜 inotifywait -m이 여러 번 실행되고 있습니까? (무한 루프)


0

나는 자식이있다. 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 루프의 내용이 반복적으로 실행되어 출력이 무기한 생성됩니다. 내가 뭘 잘못하고 있죠?

면책 조항 : 저는 관리자가 아닌 소프트웨어 개발자입니다. Bash는 아마도 내 포르테가 아닙니다.

답변:


1

에서 man inotifywait:

-엠 , --감시 장치 : 하나의 이벤트를받은 후에 종료하는 대신, 무기한으로 실행하다 . 기본 동작은 첫 번째 이벤트가 발생한 후에 종료하는 것입니다.


감사. 나는 내가 처음 읽었을 때 그것을 오해했다고 생각한다. 나는 그것이 무한정 차단하고, 이벤트를보고, 생성 / 수정을 볼 때마다 내 파이프로 출력한다는 것을 의미하는 것으로 이해했다.
Andy
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.