Çalışan bir programın 100 örneğini koru


12

Şu anda süpervizörü aynı anda çalışan bir komut dosyasının 100 örneğini korumak için kullanıyorum. Eğer ölürse, yeni bir tane başlar.

Ancak daha büyük sayıları (> 300 süreç) korumakta zorlanıyor gibi görünüyor ve bunun yerine bir şey arıyorum. Monit, tek tek komut dosyalarını izlediği için istediğim şeyi yapmıyor ve aynı komut dosyasının 100 örneğini kolayca izleyemiyor gibi görünüyor.

Kullanabileceğim farklı bir araç hakkında herhangi bir öneriniz var mı?


Bu komut dosyaları ne yapıyor ve neden birden çok örnek istiyorsunuz? Farklı argümanlarla / ortamlarla mı yönetiliyorlar?
psusi

1
Basit bir bash betiği çalışır mı? Gibi bir şey ... çalışan komut dosyası işlem sayısını, 100'den az ise, eksik sayıyı başlatmak?
gabe.

3
Ne yapmaya çalışıyorsun? 300 işlemden bazıları neden ölüyor? Muhtemelen görevinizi gerçekleştirmenin daha iyi bir yolu vardır, en azından bir komut dosyasının çalışan 299 örneği 300'den daha azsa, uygulama mimarinizle ilgili bir şey kusurlu değildir. Neden öldüklerini anlamadan ölen süreçlerin yeniden başlatılması çoğu zaman sadece başka bir ölümle sonuçlanır ve sonuç olarak önemli ölçüde ek yüke neden olur.
msw

Burada URL işleme ve her biri kendi iş parçacığı (PHP'de yazılmış) gereken eski bir sistem ile çalışıyorum. Evet, mimari kusurlu, ama yine de onunla çalışmak zorunda ... Şu anda yeni bir tane üzerinde çalışıyor :)
jong

Yanıtlar:


1

Kullanabilirsiniz:

ps h --ppid $$ | wc -l

bir bash betiğinden alt işlemlerin sayısını almak için (bunun ps'yi içerdiğini unutmayın). Yani 1000 işlem yapmak istiyorsanız, bunun 1001 döndürüp döndürmediğini kontrol edin.

cmd &

böylece mevcut betiğin alt öğesi olarak çalışırlar (ve bu nedenle sayıma dahil edilirler.) Daha sonra biraz uyuyabilir, sonra tekrar bir döngüde tekrar kontrol edebilirsiniz. Akılda tutulması gereken bir şey, diğer süreçleri üretiyorsanız ps, istediğiniz işlemleri filtrelemek için komutu değiştirmeniz gerekecektir .

Bu ilk komut bulmacanın temel parçası, senaryonuza sahip olana kadar biraz daha olmalı.


0

pgrep|wc -lBasit bir kabuk betiğinde böyle bir şey kullanırdım . Her bir kontrol arasında bir saniye (veya isterseniz Linux'ta daha az) bekleyin sleep.


0

Komut dosyanız ölürse ve kabuğa geri düşerse, her örnek için bir sarmalayıcı komut dosyası kullanabilirsiniz:

while [ 1 == 1 ] ; do /path/to/script ; done

veya betikleri çatallayan ve wait/waitpidölü işlemleri yakalamak için kullanılan bir paketleyici yazarsınız .


1
Ben en azından orada komut dosyası bazı terminal-her zaman başarısız bir durumda (dilim dolu, yapılandırma dosyası, vb okuyamıyor) olması durumunda sonunda bir uyku atmak istiyorum .. Aksi takdirde 100 süreç maymun gidiyor olabilir CPU dilimi için. Ek olarak - 100 * (bash işlemi + başarısız uygulamanın ilk başlangıç ​​ayak izi) == potansiyel olarak önemsiz miktarda ram miktarı)
synthesizerpatel
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.