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?


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.


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.


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.


+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

2

Mengapa bukan skrip bash yang sederhana?

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

Ganti xeyes dengan program pilihan Anda.


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.


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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.