Nginx config aksama süresi olmadan yeniden yükleme


122

Nginx'i ters proxy olarak kullanıyorum. Ne zaman kullanarak onun için config güncellemek

sudo "cp -r #{nginx_config_path}* /etc/nginx/sites-enabled/"
sudo "kill -s HUP `cat /var/run/nginx.pid`"

Kısa bir süre duruyorum. Bundan nasıl kaçınabilirim?


1
Bunlar komut satırı komutları mıdır? Bir sudo komutunun tamamını böyle alıntılarla sardığımı hiç görmedim, bu gerekli olmayabilir.
brianmearns

4
Sadece genel bir yorum: Standart / önerilen uygulamanın sites-enabledkopyaladığınız site yapılandırmanız için yumuşak / sembolik bir bağlantı oluşturduğunu düşünüyorum. Belirli bir konunuzla ilgili değil, ancak buna bakmak isteyebilirsiniz.
brianmearns

1
Bir kesinti ile yüzleşmemelisiniz. kill HUPnginx'te zarif bir yeniden yükleme yapma yöntemidir.
Jonathan Vanasco,

Yanıtlar:


181

Çalıştır service nginx reloadveya/etc/init.d/nginx reload

Kesinti olmadan yapılandırma sıcak bir yeniden yükleme yapacak. Bekleyen istekleriniz varsa, o zaman ölmeden önce bu bağlantıları idare edecek kalıcı nginx işlemleri olacaktır, bu nedenle yapılandırmaları yeniden yüklemenin son derece zarif bir yolu olacaktır.

Bazen hazırlık yapmak isteyebilirsiniz. sudo


10
Her ikisi de sorunun tam olarak ne ifade ettiğini yapmalı: SIGHUPnginx master işlemine gönderin . Bir fark olmamalı. nginx.org/en/docs/control.html
Gnarfoz

CentOS komutunu verdiğimde "/etc/init.d/nginx (start..stop ... restart..reload)" ifadesini kullanmaya devam ediyor ve tam olarak böyle kullandım. /İnit.d/nginx dosyasında kill -HUP cat $PIDFILE|| echo -n "yeniden yüklenemez"
mashup

1
service nginx reloadve arasındaki farkın ne olduğunu biliyor musunuz nginx -s reload? Birincisini çalıştırırsam, bu çıktıyı alıyorum: Reloading nginx configuration: nginx.ancak değişikliklerim güncellenmedi. Eğer ikincisini çalıştırırsam, çıktı alamıyorum, ancak değişikliklerim yansıtılıyor.
Ryan Quinn

Bunu bir log_not_foundyönerge ekledikten sonra denedim ancak işe yaraması için gerçekten yeniden başlatmam gerektiğini öğrendim. Sanırım yeniden yükleme tüm direktiflerde işe yaramıyor mu?
mydoghasworms

81

Çalıştırmak /usr/sbin/nginx -s reload

Daha fazla komut satırı seçeneği için http://wiki.nginx.org/CommandLine adresine bakın .


Sonunda Debian Jessie'de çalışan bir emir.
tehlike89

1
Bu daha iyi bir yol. Sunucu değil çünkü aşağı yapılandırmalarınızın hatalar varsa (sadece bu durumlarda hataları gösterir).
Mir-Ismaili

nginx default pid varsayılan konumda değilse, '-p' gerekir. yani: `/ opt / gitlab / gömülü / sbin / nginx -s yeniden yükle -p / var / opt / gitlab / nginx`
qxo

9

Hayır, hatalısınız, açıkladığınız prosedürle herhangi bir kesinti yaşamanız gerekmiyor. (Nginx, sadece herhangi bir kesinti olmadan sadece konfigürasyon yüklemesini değil aynı zamanda anında da çalışılabilir durumda olan yükseltme işlemini yapabilir.)

Gereğince http://nginx.org/docs/control.html#reconfiguration , gönderme HUPnginx sinyali 'yapılandırma dosyaları doğru değilse, tüm prosedürü size terk edilir ve bu zarif bir yeniden başlatma işlemini emin olur ve HUPsinyali göndermeden önce nginx ile bırakınız . Hiçbir noktada kesinti mümkün olmamalıdır.

Nginx'in yapılandırma dosyasını tekrar okuması için ana işleme HUP sinyali gönderilmelidir. Ana işlem ilk önce sözdizimi geçerliliğini kontrol eder, ardından yeni yapılandırma uygulamaya çalışır, yani günlük dosyalarını ve yeni dinleme soketlerini açmaya çalışır. Bu başarısız olursa, değişiklikleri geri alır ve eski yapılandırma ile çalışmaya devam eder.


2

Genellikle, bir servisin yapılandırma dosyasının yeniden yüklenmesi çalışan servisi etkilememelidir. Ancak, bu SIGHUPsinyalin nasıl işlendiğine bağlıdır .

Yeniden yükleme sırasında belirli bir hizmette bir aksama süresi yaşanıyorsa, bu aynı servisi tercihen bir yük dengeleyici kullanarak aynı anda birden fazla sunucuda çalıştırarak çözülebilir. Bu durumda, bir defada bir sunucu alabilir ve yeniden yükleyebilir / yeniden başlatabilirsiniz. Ardından, tamam olduğunu onayladıktan sonra yeniden eklenebilir.


Bu soruya doğrudan cevap vermese de, bu kesinlikle OP'nin genel olarak çalışmama süresinden kaçınmak için takip etmenin akıllıca olacağı en iyi uygulama senaryosudur.
Andrew M.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.