Использование 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()