Bagaimana meluncurkan ulang executable jika mati

8

Saya sedang mencari cara untuk memantau suatu proses, dan meluncurkan kembali yang dapat dieksekusi jika proses itu mati karena alasan apa pun. Apakah Linux memiliki alat bawaan yang dapat melakukan ini?

ikan buntal
sumber
ada lagi jawaban dan petunjuk dalam pertanyaan ini serverfault.com/questions/56526/...
JRG

Jawaban:

7

Jika diluncurkan dari init, Anda dapat membuatnya respawn oleh init. Atur aksi untuk proses 'respawn' untuk level run yang Anda inginkan prosesnya.

Cian
sumber
Demikian pula, launchd cukup bagus.
Jeremy L
Iya. Alat Daemon juga cukup keren untuk hal-hal semacam ini, tetapi gagal dalam tes 'bawaan', tanpa sengaja.
Cian
10

Saya telah menjawab pertanyaan serupa sebelumnya .

Dalam kasus Anda:

#!/bin/bash
while ! <<command>>
do
  sleep 1
  echo "Restarting program..."
done

Ganti <<command>>dengan perintah yang ingin Anda jalankan. Proses tersebut harus selesai dengan kode keluar nol untuk memutus perulangan. Kalau tidak, itu dimulai kembali oleh skrip.

Juliano
sumber
Bagus. Ini bekerja dengan ksh juga, dan saya akan mengubah "echo" menjadi "logger" perintah untuk memasukkan pesan ke log sistem.
Mei
Jawaban yang sempurna, bro.
Arunjith RS
4

Apakah Anda hanya ingin memulai ulang jika mati? Masalahnya adalah ini tidak menangani situasi di mana ia membeku. Jadi hanya memeriksa proses tidak akan selalu membantu. Jadi jika ini adalah sesuatu seperti server web, Anda ingin skrip memeriksanya dari sudut pandang pengguna.

Jika Anda mengatur Pemantauan Nagios, Anda dapat menggunakan pengendali acara . Ini hanya skrip yang Anda tulis yang akan berjalan ketika layanan turun, jadi Anda bisa memiliki yang me-restart sesuatu seperti Apache jika situs web sedang down.

Kyle Brandt
sumber
+1, Pastikan Anda juga membahas situasi di mana ia sengaja dibunuh juga.
Maximus Minimus
Titik yang baik, meskipun dalam kasus saya proses hanya menghilang
buntal
3

Bergantung pada distro, tetapi kami telah berhasil menggunakan "monit" untuk tugas ini. Cukup mudah. Anda dapat menulis cek sendiri, memantau PID proses, dll.

Contoh file monitrc:

check process sshd with pidfile /var/run/sshd.pid
   start program  "/etc/init.d/ssh start"
   stop program  "/etc/init.d/ssh stop"
   if failed port 22 protocol ssh then restart
   if 5 restarts within 5 cycles then timeout
Ramon Poca
sumber
2

Mengapa bukan skrip bash yang sederhana?

#!/usr/bin/bash
while `true`
do
  xeyes
done

Ganti xeyes dengan program pilihan Anda.

djhowell
sumber
0

Jawaban Singkat : Tidak, Anda harus melakukannya sendiri.

Jawaban Panjang : Anda akan memerlukan proses induk untuk memulainya, dan kemudian terus memeriksa apakah masih hidup dan mulai ulang jika diperlukan.

Anda dapat menggunakan sesuatu seperti daemontoolsuntuk mengelolanya.

Rory
sumber
Jawaban singkat: Anda salah besar. Jawaban panjang: jika distro Linux tidak memiliki inittab, ia akan memiliki /etc/event.d/ - salah satu mekanisme akan memulai kembali proses ketika mati.
Paul Tomblin