Namun, saya tidak terbiasa dengan fasilitas ini, jika itu adalah tugas saya untuk menyelesaikan masalah ini, dan pembacaan halaman manual yang sangat singkat tidak menawarkan tombol sederhana untuk menyesuaikan perilaku ini, saya akan melakukan hal berikut:
Baik memperpanjang skrip mulai layanan yang ada, atau jika rumit, masukkan skrip awal baru ke dalam rantai (yang pada gilirannya memulai skrip awal yang asli). Alih-alih memulai layanan segera, skrip start yang baru harus memeriksa apakah permulaan terakhir terjadi cukup baru. Ini dapat dilakukan dengan memeriksa file signaling yang dibuat oleh awal sebelumnya. Jika file tidak ada, skrip dapat melanjutkan dan menyentuh file dan memulai layanan. Jika file tersebut ada, skrip harus memeriksa apakah file tersebut cukup lama. Jika belum cukup umur, ia harus menunggu (tidur) dalam satu lingkaran sampai file menjadi cukup tua.
Sesuatu seperti ini mungkin bekerja (tunggu setidaknya 1 menit antara restart):
#!/bin/bash
SIGNALDIR=/tmp
SIGNALFILE=service.started
while /bin/true; do
found=`find "${SIGNALDIR}" -maxdepth 1 -name "${SIGNALFILE}" -mmin -1 | wc -l`
[ "${found}" -eq 0 ] && break
echo "Waiting"
sleep 10
done
touch "${SIGNALDIR}/${SIGNALFILE}"
original service start...
Anda harus membatasi tingkat restart Anda dalam
./finish
file untuk layanan itu, yang dijalankan pada penghentian abnormal. The./finish
Script akan menerima kode kembali dari./run
dan dari sana Anda dapat menentukan apa yang harus dilakukan, dll Untuk itu, Anda harus memiliki Anda./finish
skrip berteriak keras tentang kegagalan dan mengirim pemberitahuan dan melompat di sekitar terbakar ...sumber
Saya benar-benar bukan penggemar manajemen proses berbasis init (dan runit pada dasarnya adalah pengganti init). Ketika Anda menemukan, memulai kembali yang gagal dari proses yang gagal segera setelah mereka mati bukanlah strategi yang sangat baik. Saya sudah menggunakan init untuk me-restart monit, tapi itu sudah cukup. (Pembunuh OOM berpotensi dapat membunuh monit).
Jadi, saya mendorong Anda untuk mencari pengganti daripada memperbaiki keadaan.
Monit sudah cukup tua, tetapi berhasil dengan baik, dan saya tidak menyadari adanya sesuatu yang lebih baik. Ini memiliki fitur yang bagus karena tidak perlu melakukan malloc lebih banyak memori setelah start-up, jadi hentakan apa pun yang ditulis dalam bahasa scripting. Hal terakhir yang Anda inginkan adalah monitor proses Anda mati karena tidak bisa mendapatkan memori.
sumber