Saya memiliki proses yang dijalankan oleh skrip init.d di latar belakang. Misalnya:
case "$1" in
start)
/bin/myprocess &
stop)
killall myprocess
restart)
killall myprocess
/bin/myprocess &
esac
Dalam kondisi tertentu, myprocess dapat gagal dan kembali. Apakah ada cara (standar) bagaimana mendeteksi kegagalannya dan memulai kembali secara otomatis?
Jawaban:
Cara termudah adalah menambahkannya ke / etc / inittab , yang dirancang untuk melakukan hal semacam ini:
Misalnya, Anda bisa melakukan ini:
sumber
/etc/inittab
berfungsi (atau bahkan ada) jika dan hanya jika Anda memiliki sistem init berbasis sysvinit. Dengan pemula dan dengan systemd tidak. Anda harus menginstal busybox (shell yang sangat primitif membuat sysadm memulihkan tugas menjadi menyakitkan, tetapi ia dapat menggantikan initd yang kompatibel dengan sysvinit) atau sysvinit (ini adalah fosil). Dalam wadah buruh pelabuhan, hanya yang pertama tidak menyakitkan.Buildroot memiliki tiga sistem init yang memungkinkan, jadi ada tiga cara untuk melakukan ini:
BusyBox
init
Dengan ini, seseorang menambahkan entri ke
/etc/inittab
.Perhatikan bahwa BusyBox
init
memiliki/etc/inittab
format istimewa . Bidang kedua tidak ada artinya, dan bidang pertama bukan ID tetapi nama perangkat.Linux "Sistem V"
init
Sekali lagi, seseorang menambahkan entri ke
/etc/inittab
.systemd
Seseorang menulis file unit di, katakanlah
/etc/systemd/system/myprocess.service
,:Aktifkan ini untuk mulai otomatis saat boot dengan:
Mulai secara manual dengan:
Bacaan lebih lanjut
sumber
service mything start
atauservice mything stop
lagi .... apakah ada cara untuk mendapatkan yang terbaik dari keduanya? yaitu layanan sysvinit yang tidak dapat dipercaya, tetapi juga dapatkah digunakan melalui 'layanan'?Bagaimana dengan membuat subkulit dengan loop yang terus memanggil proses yang sama?
Jika itu berakhir, iterasi loop berikutnya berjalan dan mulai lagi.
Jika subshell mati, itu sudah berakhir. Satu-satunya kemungkinan dalam kasus itu adalah membuat proses lain (saya akan menyebutnya necromancer) yang memeriksa apakah proses Anda masih hidup, mulai jika tidak dan jalankan necromancer ini dengan cron, sehingga Anda dapat memeriksanya secara teratur.
Langkah selanjutnya akan bertanya-tanya apa yang bisa terjadi jika cron meninggal, tetapi pada titik tertentu Anda harus merasa aman dan berhenti khawatir.
sumber
Anda bisa memanfaatkan Monit . Ini sangat mudah digunakan dan cukup fleksibel. Lihat misalnya konfigurasi ini untuk memulai kembali proses Tomcat pada kegagalan.
Ini juga memiliki banyak contoh konfigurasi untuk banyak kasus penggunaan.
sumber
Jika Anda bukan pengguna super atau root, dan jika sistem Linux Anda menginstal Docker, maka Anda dapat membuat gambar buruh pelabuhan dari proses Anda, menggunakan buruh pelabuhan untuk memulai kembali proses Anda jika sistem di-boot ulang.
File: docker-compose.yml
Untuk memulai wadah buruh pelabuhan Anda,
Saya merasa mudah untuk menangani proses saya sendiri dengan restart otomatis jika saya bukan pengguna super sistem.
Untuk contoh contoh cara membuat gambar buruh pelabuhan, berikut adalah contoh cepat:
File: Dockerfile
sumber
Dalam kasus saya, sebagai perbaikan cepat, saya memodifikasi dan menggunakan solusi @Trylks untuk membungkus program yang saya luncurkan. Saya ingin itu berakhir hanya pada jalan keluar yang bersih.
Harus dijalankan di sebagian besar shell:
sumber
Anda dapat menggunakan restarter
Pada sistem yang lebih baru gunakan systemd yang memecahkan semua masalah sepele itu
sumber