inotifywait不执行bash脚本中的while循环

时间:2019-04-23 14:03:18

标签: linux bash sh alpine inotify

我想将文件监视程序放在Docker容器的目录中。我正在使用entrypoint.sh脚本来设置放置文件监视程序的脚本。设置如下:

#!/bin/sh

# Trigger the script with the file watcher in the background
./bin/watcher.sh &

watcher.sh脚本包含inotifywait命令:

#!/bin/sh

inotifywait \
    --event create --event delete \
    --event modify --event move \
    --format "%e %w%f" \
    --monitor --outfile '/var/log/inotifywait.log' \
    --syslog --quiet --recursive \
    /etc/haproxy |
while read CHANGED;
do
    echo "$CHANGED"
    haproxy -W -db -f /etc/haproxy/haproxy.cfg -p /var/run/haproxy.pid -sf $(cat /var/run/haproxy.pid) &
done

但是,尽管在我用top检查时列出了观察者,并且它报告了已定义的日志文件中的更改,但是循环永远不会触发。我试过用简单的方法调试循环:

    touch /var/log/special.log
    echo "${CHANGED}" >> /var/log/special.log

但是永远不会创建文件,也不会回显任何内容。在bash脚本中将inotifywait与循环一起使用的正确方法是什么?

1 个答案:

答案 0 :(得分:2)

您正在使用stdout选项将输出显式发送到文件,而不是--outfile。没有任何内容写入stdout,因此read循环中的while语句永远不会读取任何数据。

您可能想要:

inotifywait \
    --event create --event delete \
    --event modify --event move \
    --format "%e %w%f" \
    --monitor \
    --syslog --quiet --recursive \
    /etc/haproxy |
while read CHANGED;
do
    echo "$CHANGED"
    haproxy -W -db -f /etc/haproxy/haproxy.cfg -p /var/run/haproxy.pid -sf $(cat /var/run/haproxy.pid) &
done