Solusi 1:
Hanya menjawab bagian restart layanan. Saya menemukan Monit juga, tetapi pada CentOS 7 systemd akan mengurus semuanya untuk Anda. Anda hanya perlu menambahkan dua baris ini ke file .service (jika belum ada):
Restart=always
RestartSec=3
Lihat https://jonarcher.info/2015/08/ensure-systemd-services-restart-on-failure/ untuk referensi.
Jika Anda ingin membuat layanan systemd khusus, cukup mudah untuk menulis file layanan Anda sendiri. Lihat contoh di bawah, untuk server http khusus.
Mulai editor dengan file layanan baru:
vim /etc/systemd/system/httpd.service
Dan tambahkan konten berikut, yang dapat Anda edit sesuai kebutuhan:
[Unit]
Description=My httpd Service
After=network.target
[Service]
Type=simple
User=root
Environment=PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin
Environment=PERLLIB=/perl
ExecStart=/bin/httpd /etc/httpd.conf
Restart=always
RestartSec=3
[Install]
WantedBy=multi-user.target
Saya ingin memulai secara otomatis saat boot:
systemctl enable httpd
Beri tahu systemd tentang perubahan dan mulai layanan:
systemctl daemon-reload
systemctl start httpd
Dan sekarang Anda dapat melihat statusnya:
systemctl status httpd
Untuk referensi, lihat https://scottlinux.com/2014/12/08/how-to-create-a-systemd-service-in-linux-centos-7/
Solusi 2:
monit
adalah cara yang bagus untuk memantau dan memulai ulang layanan ketika gagal--dan Anda mungkin akan menggunakan ini untuk layanan penting lainnya (seperti Apache). Ada artikel bagus di nixCraft yang merinci cara menggunakan ini untuk layanan secara khusus, meskipun monit
sendiri memiliki lebih banyak fungsi di luar ini.
Adapun aspek soket, @galraen menjawab ini tepat.
Solusi 3:
Anda dapat memanggil setsockopt(2)
untuk mendengarkan socket dengan SO_REUSEADDR
, sehingga Anda dapat bind(2)
lagi tanpa menunggu kedaluwarsa semua koneksi. Kemungkinan lain:putuskan koneksi dari kernel. FreeBSD memiliki tcpdrop
perintah untuk ini, tidak tahu tentang Linux.
Solusi 4:
Jika distro linux Anda menggunakan Pemula alih-alih SysV init, maka respawn
kata kunci melakukan ini.
http://upstart.ubuntu.com/cookbook/#respawn