使用inotifywait进行nginx重启

时间:2016-09-22 20:52:29

标签: bash nginx inotifywait

我想在脚本中检测到配置更改时使用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入口点脚本的一部分。

2 个答案:

答案 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,它会起作用。