2013-05-29 3 views
1

У меня есть два вопроса:Как вы правильно смотрите и перезагружаете Nginx conf?

  • Есть ли разница между: nginx -s reload и pkill -HUP -F nginx.pid
  • Что это самый простой способ, чтобы посмотреть файл Nginx конф и после изменения проверить конфигурационный файл (nginx -t), и если она проходит перезагрузите Nginx. Можно ли это сделать с помощью runit или диспетчера процессов, такого как Supervisor?
+0

Это '-F' или' -f' (у меня нет '-F' на моем' pkill') –

+0

По крайней мере, под Ubuntu 13.04 это '-F' o r '--pidfile'. – velo9

ответ

2

По крайней мере, на Unix, как «перезагрузка» действия и HUP сигнал рассматриваются как один благодаря коду декларации

ngx_signal_t signals[] = { 
    { ngx_signal_value(NGX_RECONFIGURE_SIGNAL), 
     "SIG" ngx_value(NGX_RECONFIGURE_SIGNAL), 
     "reload", 
     ngx_signal_handler }, 

src/os/unix/ngx_process.c в. В ngx_signal_handler() тот же код comnmon

case ngx_signal_value(NGX_RECONFIGURE_SIGNAL): 
     ngx_reconfigure = 1; 
     action = ", reconfiguring"; 
     break; 

выполняется, что готовится к общей реконфигурации.

Чтобы активировать действие при изменении файла, вы можете либо сделать crontab, либо выбрать периодичность проверки, либо использовать inotifywait.

Чтобы определить, есть ли nginx -t это ошибка, проверьте код возврата в файле Баш, $?

nginx -t 
if [ $? -eq 0 ] then; 
    nginx -s reload 
fi 

Примечание: Вы можете также использовать service nginx reload

(Смотрите примеры проверки кода возврата here)

+0

Я на самом деле обычно использую 'service nginx reload' – rednaw

+0

@rednaw спасибо за примечание. –

+0

Существует опечатка, она должна быть 'nginx -t' вместо' linux -t' в последнем блоке кода. (не может изменить его из-за глупого правила «шесть символов, необходимых для редактирования») – matlehmann

2
#!/bin/bash 

# NGINX WATCH DAEMON 
# 
# Author: Devonte 
# 
# Place file in root of nginx folder: /etc/nginx 
# This will test your nginx config on any change and 
# if there are no problems it will reload your configuration 
# USAGE: sh nginx-watch.sh 

# Set NGINX directory 
# tar command already has the leading/
dir='etc/nginx' 

# Get initial checksum values 
checksum_initial=$(tar --strip-components=2 -C/-cf - $dir | md5sum | awk '{print $1}') 
checksum_now=$checksum_initial 

# Start nginx 
nginx 

# Daemon that checks the md5 sum of the directory 
# ff the sums are different (a file changed/added/deleted) 
# the nginx configuration is tested and reloaded on success 
while true 
do 
    checksum_now=$(tar --strip-components=2 -C/-cf - $dir | md5sum | awk '{print $1}') 

    if [ $checksum_initial != $checksum_now ]; then 
     echo '[ NGINX ] A configuration file changed. Reloading...' 
     nginx -t && nginx -s reload; 
    fi 

    checksum_initial=$checksum_now 

    sleep 2 
done 
Смежные вопросы