Pada Windows, Anda dapat mengatur apa yang harus terjadi jika / ketika suatu layanan gagal. Apakah ada cara standar untuk mencapai hal yang sama di Linux (khususnya CentOS)?
Sebagian besar pertanyaan saya adalah: bagaimana Anda menangani soket yang dibiarkan terbuka - misalnya di TIME_WAIT, FIN_WAIT1, dll.
Saat ini jika layanan yang saya kembangkan macet, saya harus menunggu soketnya untuk menghapus atau mengubah porta pendengaran sebelum saya dapat me-restart secara manual.
Terima kasih atas bantuan Anda.
Hanya menjawab bagian restart layanan. Saya menemukan Monit juga, tetapi pada CentOS 7 systemd mengurus semua itu untuk Anda. Anda hanya perlu menambahkan dua baris ini ke file .service (jika belum ada di sana):
Lihat https://jonarcher.info/2015/08/ensure-systemd-services-restart-on-failure/ untuk referensi.
Jika Anda ingin membuat layanan systemd kustom, cukup mudah untuk menulis file layanan Anda sendiri. Lihat contoh di bawah ini, untuk server http khusus.
Mulai editor dengan file layanan baru:
Dan tambahkan konten berikut, yang dapat Anda edit sesuai kebutuhan:
Saya ingin memulai secara otomatis saat boot:
Beri tahu systemd tentang perubahan dan mulai layanan:
Dan sekarang Anda dapat melihat statusnya:
Untuk referensi, lihat https://scottlinux.com/2014/12/08/how-to-create-a-systemd-service-in-linux-centos-7/
sumber
systemd
manajer layanan standar di sebagian besar distribusi populer, dapat melakukannya untuk Anda.Anda dapat memanggil
setsockopt(2)
soket mendengarkanSO_REUSEADDR
, sehingga Anda dapat melakukannyabind(2)
lagi tanpa menunggu berakhirnya semua koneksi. Kemungkinan lain: jatuhkan koneksi dari kernel. FreeBSD punyatcpdrop
perintah untuk ini, tidak tahu tentang Linux.sumber
Jika distro linux Anda menggunakan Upstart alih-alih SysV init, maka
respawn
kata kunci melakukannya.http://upstart.ubuntu.com/cookbook/#respawn
sumber