Saya mulai meng-hosting situs beberapa waktu lalu menggunakan Cherokee. Untuk sumber eksternal (FastCGI, dll) ia memiliki opsi untuk meluncurkan proses jika tidak dapat menemukan satu yang berjalan pada soket atau port yang ditunjuk. Ini bagus karena itu berarti jika PHP atau situs Django jatuh (seperti yang kadang-kadang terjadi) itu restart secara otomatis.
Di server baru menggunakan PHP-FPM saya tidak bisa menggunakan Cherokee (memiliki bug dengan PHP) jadi saya sudah pindah ke NGINX. Saya sangat suka NGINX (untuk gaya konfigurasi) tetapi saya mengalami masalah serius dengan proses jatuh dan tidak pernah respawning. PHP melakukan hal ini kadang-kadang tetapi situs Django lebih merupakan masalah. Saya telah membuat skrip init untuk mereka dan mereka muncul saat boot tetapi ini tidak membantu saya jika mereka masuk di antara reboot.
Saya kira saya sedang mencari proxy FastCGI. Sesuatu yang, seperti Cherokee, tahu proses apa yang harus berjalan pada soket / port mana dan meresponsnya sesuai permintaan. Apakah hal semacam itu ada? Apakah ada cara untuk membangun ini ke NGINX (untuk kemudahan konfigurasi)?
/etc/init.d/apachectl
ke dalamnya. Anda sering harus menulis ulang skrip startup sederhana Anda sendiri untuk digunakanexec
. Meskipun saya akan senang melihat beberapa contoh menggunakan daemontoolsrespawn di inittab
sumber
Saya
daemontools
menyarankan kedua , tetapi jika Anda tidak suka cara kerja perangkat lunak DJB (untuk alasan apa pun), ada jugasupervisord
.Saya membuat gambar FreeBSD beberapa waktu lalu yang dulu
supervisord
mengelolanginx
dangunicorn
, yang saya gunakan untuk meng-host beberapa aplikasi WSGI sederhana, dan seluruh prosesnya cukup mudah.Jika Anda melakukan ini untuk Django, Gunicorn membuatnya sangat mudah untuk menyebarkan aplikasi Django, btw. Lihat posting blog ini untuk lebih jelasnya.
sumber
Pilihan lain bisa menggunakan monit , yang biasanya saya gunakan.
sumber
Sudahkah Anda mempertimbangkan
god
?Saya menggunakannya untuk memastikan bahwa jika instance Rails / nginx jatuh, mereka dihidupkan kembali, dan meskipun saya tidak melihat dibangun dalam dukungan untuk memeriksa apakah itu menggunakan port yang tepat atau tidak, tetapi jika masalahnya adalah bahwa proses gagal atau tidak lagi berjalan, Anda tidak bisa salah
god
.sumber
Selain daemontools dan supervisor, ada daemonize .
sumber
Solusi hackish adalah meluncurkan skrip (via
cron
) secara berkala yang mendeteksi jika prosesnya mati, dan dalam hal ini meluncurkannya kembali.sumber
Ada berbagai cara untuk me-restart daemon yang gagal, rekomendasi yang biasa adalah "respawn in inabab" tetapi dengan beberapa pertimbangan batasan jika mesin benar-benar kacau.
Daemon pengawas juga dapat memantau proses melalui file PID-nya. Namun, itu seharusnya hanya dianggap sebagai garis pertahanan sekunder untuk me-reboot mesin yang terlalu sakit untuk berjalan dengan baik (mis. Kehabisan memori, percabangan garpu, dll), dan bukan sebagai cara utama atau memantau dan memulai kembali daemon.
Terakhir, Anda dapat mempertimbangkan pemantauan sistem yang rumit menggunakan nagios untuk memberikan pandangan global kepada administrator. Itu dapat menjalankan plug-in untuk menyelidiki operasi daemon secara eksternal, yang merupakan tes yang lebih lengkap dari fungsinya yang hanya menjalankan PID.
sumber
Jawaban sederhana - mulai, tulis pid Anda di suatu tempat, dan setiap kali x (detik, menit, taruhan Anda) memeriksa apakah prosesnya sudah selesai.
Jawaban panjang - semua hal di atas adalah metode yang baik. Namun agak rumit.
Juga perlu diingat bahwa menjadi hidup dan menjawab permintaan adalah hal yang berbeda.
sumber