Saya ingin pemula melakukan dua hal:
- berhentilah mencoba untuk memulai kembali proses yang gagal dengan sangat cepat
- jangan pernah menyerah mencoba untuk respawn
Dalam dunia yang ideal, pemula akan mencoba memulai kembali proses mati setelah 1s, lalu menggandakan penundaan itu pada setiap upaya, hingga mencapai satu jam.
Apakah hal seperti ini mungkin?
never give up trying to respawn
tetap tidak dijawab. siapa saja?Jawaban:
Cookbook Upstart merekomendasikan penundaan post-stop ( http://upstart.ubuntu.com/cookbook/#delay-respawn-of-a-job ). Gunakan
respawn
bait tanpa argumen dan itu akan terus mencoba selamanya:(Saya mendapatkan ini dari ini Tanyakan pertanyaan Ubuntu )
Untuk menambahkan bagian penundaan eksponensial, saya akan mencoba bekerja dengan variabel lingkungan di skrip pasca-berhenti, saya pikir sesuatu seperti:
** EDIT **
Untuk menerapkan penundaan hanya saat respawn, menghindari keterlambatan pada perhentian nyata, gunakan yang berikut, yang memeriksa apakah sasaran saat ini "berhenti" atau tidak:
sumber
post-start
mengatur ulang ke 1.Seperti yang telah disebutkan, gunakan
respawn
untuk memicu respawn.Namun, cakupan Cookbook Upstart pada
respawn-limit
mengatakan bahwa Anda harus menentukanrespawn limit unlimited
untuk memiliki perilaku coba lagi yang berkelanjutan.Secara default akan mencoba lagi selama proses tidak respawn lebih dari 10 kali dalam 5 detik.
Karena itu saya akan menyarankan:
sumber
Saya akhirnya memasukkan
start
cronjob. Jika layanan berjalan, itu tidak berpengaruh. Jika tidak berjalan, itu memulai layanan.sumber
Saya telah melakukan perbaikan pada jawaban Roger. Biasanya Anda ingin mundur ketika ada masalah dalam perangkat lunak yang mendasarinya yang menyebabkannya banyak crash dalam waktu singkat, tetapi begitu sistem pulih Anda ingin mengatur ulang waktu mundur. Dalam versi Roger layanan akan tidur selama 60 detik selalu, bahkan untuk crash tunggal dan terisolasi setelah 7 crash.
sumber
Anda ingin
respawn limit <times> <period>
- meskipun ini tidak akan memberikan perilaku eksponensial yang Anda cari, mungkin akan berlaku untuk sebagian besar kasus penggunaan. Anda dapat mencoba menggunakan nilai yang sangat besar untuktimes
danperiod
memperkirakan apa yang ingin Anda capai. Lihat bagian man 5 init direspawn limit
untuk referensi.sumber
respawn limit 10 3600
10 mencoba kemungkinan akan segera habis - karena secara default tidak ada penundaan.Yang lain telah menjawab pertanyaan untuk bait standar respawn dan respawn limit, tetapi saya ingin menambahkan solusi saya sendiri untuk skrip post-stop yang mengontrol penundaan antara memulai kembali.
Masalah terbesar dengan solusi yang diusulkan oleh Roger Dueck adalah bahwa keterlambatan menyebabkan 'restart jobName' untuk menggantung sampai tidur selesai.
Penambahan saya memeriksa untuk melihat apakah ada restart yang sedang berlangsung sebelum menentukan apakah akan tidur atau tidak.
sumber