![为什么 inotifywait -m 运行多次?(无限循环)](https://linux22.com/image/1551949/%E4%B8%BA%E4%BB%80%E4%B9%88%20inotifywait%20-m%20%E8%BF%90%E8%A1%8C%E5%A4%9A%E6%AC%A1%EF%BC%9F%EF%BC%88%E6%97%A0%E9%99%90%E5%BE%AA%E7%8E%AF%EF%BC%89.png)
我有一个post-receive
如下所示的 git 脚本:
#!/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
:
-m,- 监视器:不是在收到单个事件后就退出,无限期执行。默认行为是在第一个事件发生后退出。