Bir işlemin daima çalıştığından emin olun


23

Bir süre önce Cherokee kullanarak sitelere ev sahipliği yapmaya başladım. Harici kaynaklar için (FastCGI, vb.), Belirtilen soket veya portta çalışan bir tane bulamazsa, işlemi başlatma seçeneği vardır. Bu harika, çünkü eğer PHP veya Django sitesi düşerse (zaman zaman olduğu gibi) otomatik olarak yeniden başlatıyor.

PHP-FPM kullanan yeni bir sunucuda Cherokee kullanamadım (PHP ile ilgili bir hata var) bu yüzden NGINX'e taşındım. NGINX'i (config tarzı için) gerçekten seviyorum, ancak düşen ve asla yeniden doğmayan süreçlerle ilgili ciddi sorunlar yaşıyorum. PHP bunu bazen yapar ancak Django siteleri daha büyük bir problemdir. Onlar için init scriptleri hazırladım ve açılışta ortaya çıkıyorlar, ancak yeniden başlatmalar arasında sızlanırlarsa bu bana yardımcı olmuyor.

Sanırım bir FastCGI proxy'si arıyorum. Cherokee gibi, hangi işlemlerin hangi yuvaların / bağlantı noktalarının üzerinde çalışması gerektiğini ve istek üzerine yeniden düzenlemesini gerektiren bir şey. Böyle bir şey var mı? Bunu NGINX'e yerleştirmenin bir yolu var mı (yapılandırma kolaylığı için)?

Yanıtlar:


13

Peki daemontools ve özellikle aracı denetleyecek

bir servisi izler. Hizmeti başlatır ve ölürse hizmeti yeniden başlatır. Yeni bir servis ayarlamak kolaydır: tüm denetleme ihtiyaçları servisi çalıştıran bir komut dosyası içeren bir dizindir.


Daemontools için +1. Ancak, genellikle /etc/init.d/apachectlbunun gibi bir betiği fırlatamazsınız . Sık kullanmanız için kendi basit başlangıç ​​betiğinizi yeniden yazmanız gerekir exec. Her ne kadar Daemontools kullanarak bazı örnekler görmek isterdim
Stefan Lasiewski

Daemontools'un runit olarak başka bir enkarnasyonu vardır. Artık daemontools'un kamuya açık olması o kadar önemli değil, ancak eski bir dağıtım sadece runit yapmış olabilir.
saat


5

daemontoolsÖneriyi ikinci olarak bıraktım , ancak DJB yazılımının çalışma şeklini beğenmezseniz (ne sebeple olursa olsun), o da var supervisord.

Kullanılan sırt ederken bir FreeBSD görüntü a kurmak supervisordyönetmek nginxve gunicornbazı basit WSGI uygulamaları barındırmak için kullanılan hangi ve tüm süreç oldukça basit oldu.

Bunu Django için yapıyorsanız, Gunicorn, Django uygulamalarını, btw'yi dağıtmayı gerçekten kolaylaştırıyor. Daha fazla bilgi için bu blog gönderisine bakın.


4

Başka bir seçenek de genellikle kullandığım monit'i kullanmak olabilir.


3

Düşündün god

Tanrı, Ruby'de yazılmış izleme çerçevesini genişletmek kolay, yapılandırması kolay ve kolaydır.

Sunucu işlemlerinizi ve görevlerinizi çalışır durumda tutmak, dağıtım işleminizin basit bir parçası olmalıdır. Tanrı, mevcut en basit, en güçlü izleme uygulaması olmayı hedeflemektedir.

Rails / nginx örneklerinin devrilmemesi durumunda canlandıklarından emin olmak için kullanıyorum ve doğru bağlantı noktasını kullanıp kullanmadığını kontrol etmek için yerleşik destek göremesem de, ancak sorun işlemin başarısız olması durumunda. artık koşmuyor, yanlış gidemem god.



0

Kesin bir çözüm, işlemin bitip bitmediğini algılayan bir komut dosyasını (via cron) periyodik olarak başlatmak ve bu durumda yeniden başlatmak olacaktır.


0

Arızalı bir arka plan programı yeniden başlatmanın çeşitli yolları vardır, normal öneri "inittab'ta yeniden çizilir", ancak makine gerçekten vidalanmışsa, bir miktar sınırlama göz önünde bulundurulur.

Bekçi uygulaması daimi, PID dosyası aracılığıyla bir işlemi izleyebilir. Bununla birlikte, bu, yalnızca düzgün çalışamayacak kadar hasta olan bir makineyi yeniden başlatmak için (örn. Bellek dışı, çatalla bombalanmış vb.) İkincil bir savunma hattı olarak düşünülmeli ve birincil bir yöntem olarak kullanılmamalıdır.

Son olarak, yöneticilere genel bir görünüm sağlamak için nagios kullanarak karmaşık sistemleri izlemeyi düşünebilirsiniz. Daemon'un dışarıdan işleyişini araştırmak için eklentiler çalıştırabilir; bu, sadece PID'nin canlı olduğu işleyişinin daha eksiksiz bir testidir.


-1

Basit cevap - başla, istediğini bir yere yaz ve her x zamanında (saniye, dakika, bahis) işlemin yapılıp yapılmadığını kontrol et.

Uzun cevap - yukarıdakilerin hepsi iyi yöntemlerdir. Ama biraz karmaşık.

Ayrıca, hayatta olmanın ve isteklere cevap vermenin farklı şeyler olduğunu unutmayın.


1
… Ve parmaklarınızı çaprazlayın ve hiçbir şeyin PID dosyası üzerinde karalamadığını, silmediğini veya farklı bir arka plan programı için yeniden kullanmadığını ya da çeke iyi tepki vermeyecek başka masum ve ilgisiz bir işlemi yeniden işaret ettiğini umarak kalktığın için. ☺ Bu yüzden, kumandayı çocuk işleyen ve onları her zamanki Unix / Linux sistem mekanizmalarıyla izleyen uygun bir daemon süpervizörünün uzun cevabı uzun zamandır kabul edilen daha iyi bir yoldur.
JdeBP
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.