我想在脚本中检测到配置更改时使用inotifywait重新启动nginx。问题是,如果我在守护进程模式下运行它,它会继续重新启动nginx。
脚本如下所示:
while inotifywait -d -o /var/log/bootstrap.log --format '%T %:e %w' --timefmt '%Y.%m.%d %H:%M:%S' -e modify,create,delete,move,attrib $(find -L /etc/nginx -type f)
do
NGX_STATUS=$(nginx -t 2>&1)
NGX_CFG_STATUS=$(echo $NGX_STATUS | grep successful)
if [[ $(echo $?) == 0 ]]; then
/etc/init.d/nginx restart
else
echo $NGX_STATUS | tee -a /var/log/bootstrap.log
fi
done
注意:此脚本是docker入口点脚本的一部分。
答案 0 :(得分:0)
您可以尝试以下脚本。在做这件事之前,它会检查是否安装了pyinotify。
import sys
import pip
def install(package):
pip.main(['install', package])
try:
import pyinotify
except ImportError:
print 'pyinotify is not installed, installing it now!'
install('pyinotify')
finally:
import pyinotify,subprocess
def onChange(ev):
cmd = ['/bin/systemctl', 'reload', 'nginx.service']
subprocess.Popen(cmd).communicate()
wm = pyinotify.WatchManager()
wm.add_watch('/etc/nginx/nginx.conf', pyinotify.IN_MODIFY, onChange)
notifier = pyinotify.Notifier(wm)
notifier.loop()
答案 1 :(得分:0)
当您将inotifywait
置于守护进程模式(-d
选项)时,它将分配给后台进程并返回。通过从while
循环调用它,您将创建许多在后台运行的inotifywait
守护进程。
不要通过-d
,它会起作用。