Saya ingin layanan systemd saya secara otomatis restart pada kegagalan. Selain itu saya ingin menilai membatasi restart. Saya ingin mengizinkan maksimum 3 restart dalam durasi 90 detik. Karenanya saya telah melakukan konfigurasi berikut.
[Layanan]
Mulai ulang = selalu
StartLimitInterval = 90
StartLimitBurst = 3
Sekarang layanan dimulai ulang pada kegagalan. Setelah 3 kegagalan cepat / restart itu tidak memulai lagi seperti yang diharapkan. Sekarang saya mengharapkan systemd untuk memulai layanan setelah batas waktu (StartLimitInterval). Tetapi systemd tidak secara otomatis memulai layanan setelah batas waktu (90sec), jika saya secara manual me-restart layanan setelah batas waktu itu berfungsi. Tapi saya ingin systemd untuk secara otomatis memulai layanan setelah StartLimitInterval. Tolong beri tahu saya cara mencapai fitur ini.
StartLimitIntervalSec
, bukanStartLimitInterval
.Jawaban:
Untuk memiliki layanan restart 3 kali pada interval 90 detik termasuk baris berikut dalam file layanan systemd Anda:
Ini berfungsi untuk saya untuk layanan yang menjalankan skrip menggunakan 'Type = idle'. Perhatikan bahwa 'StartLimitInterval' harus lebih besar dari 'RestartSec * StartLimitBurst' jika tidak, layanan akan dimulai ulang tanpa batas waktu.
Butuh beberapa waktu dengan banyak coba-coba untuk mengetahui bagaimana systemd menggunakan opsi ini, yang menunjukkan bahwa systemd tidak didokumentasikan dengan baik seperti yang diharapkan. Opsi-opsi ini secara efektif menyediakan waktu siklus coba ulang dan coba ulang maksimum yang saya cari.
sumber
StartLimitInterval=
arahan di ubuntu terbaru saya 18 ...Perilaku yang Anda gambarkan konsisten dengan dokumentasi:
StartLimitInterval =, StartLimitBurst = Konfigurasikan pembatasan tingkat layanan. Secara default, layanan yang dimulai lebih dari 5 kali dalam 10 detik tidak diizinkan untuk memulai lagi sampai interval 10 detik berakhir. Dengan dua opsi ini, pembatasan tingkat ini dapat dimodifikasi. Gunakan StartLimitInterval = untuk mengkonfigurasi interval pengecekan (default ke DefaultStartLimitInterval = dalam file konfigurasi manajer, atur ke 0 untuk menonaktifkan segala jenis pembatasan tingkat). Gunakan StartLimitBurst = untuk mengonfigurasi berapa banyak permulaan yang diizinkan (default ke DefaultStartLimitBurst = dalam file konfigurasi manajer). Opsi konfigurasi ini sangat berguna dalam hubungannya dengan Restart =; namun, mereka berlaku untuk semua jenis permulaan (termasuk manual), bukan hanya yang dipicu oleh logika Restart =.Perhatikan bahwa unit yang dikonfigurasikan untuk Restart = dan yang mencapai batas mulai tidak dicoba untuk dihidupkan ulang lagi; Namun, mereka mungkin masih direstart secara manual di titik kemudian, dari titik mana, logika restart diaktifkan kembali. Perhatikan bahwa systemctl reset-gagal akan menyebabkan penghitung tingkat mulai ulang untuk layanan memerah, yang berguna jika administrator ingin memulai layanan secara manual dan batas mulai mengganggu itu.
Saya masih berusaha untuk menemukan cara untuk mencapai perilaku yang Anda inginkan.
sumber
StartLimitIntervalSec=
(danDefaultStartLimitIntervalSec=
)? Perhatikan penambahanSec
untuk kedua nama parameter.Beberapa tahun kemudian dan dengan systemd 232 itu tidak berfungsi lagi seperti yang dijelaskan dalam pertanyaan dan jawaban dari 2016. Nama opsi
StartLimitIntervalSec
dan Bagian telah berubah. Sekarang harus terlihat seperti contoh ini:Ini akan melakukan 5 restart dalam 30 detik (5 * 6) ditambah satu restart dalam 33 detik. Jadi kita punya 6 restart dalam 33 detik. Ini melebihi batas 5 restart dalam 33 detik. Jadi restart akan berhenti pada 5 hitungan setelah sekitar 31 detik.
sumber
StartLimitInterval
masih didukung, jika tidak didokumentasikan, diService
bagian ini. Tetapi yang baru, lebih disukaiStartLimitIntervalSec
hanya bekerja diUnit
.Anda dapat mengatur
OnFailure
untuk memulai layanan lain ketika ini gagal. Di layanan on-fail Anda dapat menjalankan skrip yang menunggu dan kemudian restart layanan Anda.Untuk sampel tentang cara mengatur ini lihat Systemd status mail on failure unit dan modifikasi untuk memulai kembali layanan sebagai gantinya.
sumber
Anda dapat gunakan
StartLimitAction=reboot
. Ini akan mem-boot ulang sistem setelah StartLimitInterval.sumber