Pertahankan 100 instance dari program yang berjalan


12

Saat ini saya menggunakan supervisord untuk mempertahankan 100 contoh skrip yang berjalan sekaligus. Jika ada yang mati maka akan memulai yang baru.

Namun sepertinya akan kesulitan mempertahankan angka yang lebih besar (> 300 proses) dan saya mencari penggantinya. Monit tampaknya tidak melakukan apa yang saya inginkan karena memonitor setiap skrip dan tampaknya tidak dapat dengan mudah menonton 100 instance dari skrip yang sama.

Adakah saran tentang alat berbeda yang bisa saya gunakan?


Apa yang dilakukan skrip-skrip ini dan mengapa Anda menginginkan banyak instance? Apakah mereka dijalankan dengan argumen / lingkungan yang berbeda atau apa?
psusi

1
Apakah skrip bash sederhana berfungsi? Sesuatu seperti ... hitung jumlah proses skrip yang berjalan, jika kurang dari 100, mulai jumlah yang hilang?
gabe.

3
Apa yang ingin Anda capai? Mengapa beberapa dari 300 proses mati? Mungkin ada cara yang lebih baik untuk menyelesaikan tugas Anda, tidak terkecuali jika 299 contoh menjalankan skrip kurang bagus dari 300, ada yang salah dengan arsitektur aplikasi Anda. Memulai kembali proses yang mati tanpa memahami mengapa mereka mati sering kali akan mengakibatkan kematian lagi dan menimbulkan biaya substansial.
msw

Saya sedang bekerja dengan sistem warisan di sini yang melakukan pemrosesan URL dan masing-masing membutuhkan utasnya sendiri (ditulis dalam PHP). Ya, arsitekturnya cacat, tetapi masih harus bekerja dengannya ... Mengerjakan yang baru saat ini :)
jong

Jawaban:


1

Kamu bisa memakai:

ps h --ppid $$ | wc -l

untuk mendapatkan jumlah proses anak dari skrip bash (ingat ini termasuk ps). Jadi jika Anda ingin memiliki 1000 proses, Anda memeriksa untuk melihat apakah itu mengembalikan 1001. Jika tidak menjalankannya dengan:

cmd &

sehingga mereka dijalankan sebagai anak-anak dari skrip saat ini (dan karena itu termasuk dalam hitungan.) Anda kemudian dapat tidur sebentar, lalu periksa lagi dalam satu lingkaran selamanya. Satu hal yang perlu diingat adalah jika Anda memunculkan proses lain, Anda perlu memodifikasi psperintah untuk memfilter proses yang Anda inginkan.

Perintah pertama itu adalah bagian inti dari teka-teki, itu seharusnya hanya sedikit lebih sampai Anda memiliki skrip Anda.


0

Saya akan menggunakan pgrep|wc -latau sesuatu seperti itu dalam skrip shell sederhana. Tunggu satu detik (atau kurang di Linux jika Anda mau) antara setiap cek dengan sleep.


0

Jika skrip Anda mati dan hanya akan kembali ke shell, Anda dapat menggunakan skrip pembungkus untuk setiap contoh:

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

atau Anda menulis beberapa pembungkus yang memotong skrip, dan menggunakan wait/waitpiduntuk menangkap proses yang mati.


1
Saya setidaknya akan tidur di sana pada akhir kalau-kalau script memiliki beberapa kondisi terminal-selalu-gagal (slice penuh, tidak dapat membaca file konfigurasi, dll) .. Kalau tidak, Anda dapat memiliki 100 proses akan kera untuk sepotong CPU. Selain itu - 100 * (proses bash + jejak startup awal dari aplikasi yang gagal) == berpotensi jumlah ram non-sepele)
synthesizerpatel
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.