Saya perlu memantau beberapa proses yang berjalan di server web saya. Untuk beberapa alasan, pernis saat ini crash satu atau dua hari sekali. Saya menggunakan monit untuk me-restart pernis secara otomatis, tetapi tidak berhasil. Inilah entri monit.conf saya untuk Varnish.
check process varnish with pidfile /var/run/varnish.pid
start program = "/etc/init.d/varnish start" with timeout 60 seconds
stop program = "/etc/init.d/varnish stop"
if failed host <my server ip> port 80 protocol http
and request "/blank.html" then restart
if 3 restarts within 5 cycles then timeout
group server
File log menunjukkan bahwa setelah pernis berhenti berjalan, percobaan ulang dimulai setelah itu semua gagal. Kemudian akhirnya monit berhenti memonitor pernis.
Adakah yang punya saran bagaimana saya bisa memperbaikinya? Atau lebih baik lagi, dapatkah Anda menyarankan cara sederhana lainnya untuk secara otomatis memantau dan memulai kembali proses yang macet? Terima kasih!
Jawaban:
Saya akan mencari daemontools ( http://cr.yp.to/daemontools.html ).
Mengawasi dibangun untuk tujuan ini - untuk memulai proses dan menonton mereka, memulai kembali dengan segera jika mereka pernah berakhir.
Anda masih dapat menggunakan monit jika Anda perlu melakukan sesuatu yang lebih rumit daripada pemeriksaan "apakah masih berjalan" sederhana, dan jika proses perlu dimulai kembali, maka lakukan itu melalui pengawasan.
sumber
Anda juga dapat menggunakan / etc / inittab untuk memulai kembali proses mati menggunakan tindakan respawn .
Lihat bagian inittab di http://aplawrence.com/Unixart/startup.html
sumber
Anda dapat menggunakan skrip event handler dengan Nagios jika Anda memiliki itu untuk memulai kembali layanan.
Jika pernis membutuhkan izin root untuk memulai (skrip init.d biasanya melakukannya) ubah "/etc/init.d/varnish start" menjadi "sudo /etc/init.d/varnish start". Tapi itu mungkin tidak akan cukup karena Anda mungkin tidak ingin memberikan apa pun yang dijalankan pengguna sebagai total sudo nopasswd privilege untuk semua perintah dan memberikan sudo ke skrip shell pada dasarnya sama buruknya. Jadi, Anda perlu mencari tahu perintah mana dalam skrip init yang memerlukan sudo, berikan perintah-perintah tersebut hak istimewa sudo di file / etc / sudoers ke pengguna monit, dan akhirnya edit skrip init yang sesuai. Atau mungkin alih-alih semua pernis ini dapat dijalankan sebagai pengguna non-root?
Akhirnya, saya yakin Anda tahu ini, tetapi saya akan mengatakannya. Anda jelas melakukan banyak upaya dalam hal ini, saya harap Anda berusaha sebanyak mungkin untuk mencari tahu mengapa pernis crash dan benar-benar memperbaikinya (atau memburu para pengembang untuk mencari tahu mengapa) :-)
Pembaruan:
Ini mungkin tidak bersih, tetapi cara mudah untuk menyelesaikan ini karena root mungkin untuk mengatur skrip yang memeriksa apakah prosesnya baik-baik saja, dan jika tidak memulainya. Kemudian jalankan script itu setiap beberapa menit sebagai tugas cron.
sumber
Metode hebat lain yang diambil dari StackOverflow :
Ini dapat ditambahkan ke crontab:
Kemudian tambahkan aturan untuk memulai skrip monitor Anda:
Atau ditambahkan sebagai skrip di
/etc/init.d
Lihat jawaban StackOverflow untuk penjelasan terperinci tentang mengapa ini adalah pendekatan yang baik.
sumber
Saya juga mencari cara paling sederhana untuk menangani masalah ini. Cara termudah yang bisa saya temukan adalah dengan menambahkan file
Restart=allways
terkait sebagai baris terakhir dari tag..service
/etc/systemd/system/multi-user.target.wants/
[service]
Setelah itu lakukan
sudo systemctl daemon-reload
dilanjutkan dengansudo systemctl restart service.service
memuat ulang perubahan.Anda dapat menguji dengan memeriksa apakah layanan ini berjalan:,
systemctl status processname
periksa stempel waktu mulai. Setelah itups -ef | grep servicename
, iklan membunuh proses dengan id yang baru ditemukankill 1234
. setelah itu lakukansystemctl status processname
lagi dan periksa apakah cap waktu mulai diperbarui.Ini harus bekerja pada:
sumber