inotifywait 未在 bash 脚本中执行 while 循环



我想在我的 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 with 循环的正确方法是什么?

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

您可能希望:

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

相关内容

  • 没有找到相关文章

最新更新