Использование inotifywait для перезапуска nginx

Я хочу использовать 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 ответа

Когда вы положите inotifywait в режиме демона (-d опция), он разветвляется на фоновый процесс и возвращается. Позвонив из while петля, вы создаете много inotifywait демоны, которые работают в фоновом режиме.

Не проходи -d и это будет работать.

Вы можете попробовать скрипт ниже. Он проверяет, установлен ли 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()
Другие вопросы по тегам