Bagaimana saya bisa secara otomatis memulai kembali suatu proses setelah itu berakhir?

11

Saya punya program golang yang ingin saya restart setelah berakhir pada kotak Squian Debian. Masalahnya adalah melayani HTTP di balik pengaturan Apache 2 mod_proxy. Saya tidak berharap prosesnya gagal, tetapi saya ingin memiliki asuransi untuk itu.

Di Ubuntu saya akan menggunakan pemula untuk menjaga proses tetap hidup. Debian tidak menyukai pemula dari apa yang saya mengerti karena ini adalah pengganti init.

Apakah ada alternatif yang memulai kembali satu atau lebih proses setelah mereka berhenti yang bekerja pada Squeeze dan bermain baik dengan init?

Dihapus
sumber
Bisakah Anda ulangi pertanyaan Anda? Apakah Anda ingin memulai kembali proses setelah dihentikan?
mailq
Saya ingin memulai kembali proses secara otomatis jika ada kesalahan atau berakhir dengan sendirinya.
Dihapus
2
Program init tradisional melakukan ini dengan tepat. Mengapa orang berpikir itu akan menjadi ide yang baik untuk menggunakan init untuk menjalankan skrip shell menggunakan skrip shell yang memulai proses lain yang melakukan hal yang sama, tetapi tanpa panik kernel otomatis dan reboot jika proses itu pernah gagal, benar-benar di luar saya.
Simon Richter
Itu poin yang adil. Saya akan menyelidiki hanya menggunakan init juga. Saya mengemas perangkat lunak menggunakan dpkg sehingga membuat skrip init tidak menjadi kesulitan.
Dihapus

Jawaban:

10

Cara terbaik untuk melakukannya adalah daemontools. Mereka memungkinkan Anda untuk memantau dan menghidupkan kembali proses.

Lihat dokumentasi di situs web mereka: http://cr.yp.to/daemontools.html

mailq
sumber
1
Terima kasih - itulah yang saya cari. DJB = bagus sebagai aturan. Saya seharusnya ingat bahwa ada apa dengan menghabiskan 5 tahun menjaga qmail!
Dihapus
Sama dengan saya, kecuali bahwa saya dulu menjaga djbdns untuk beberapa waktu.
mr.b
10

mengawasi adalah alternatif yang ringan dan efisien. Di bawah debian itu dikemas dalam daemontools . Anda juga dapat membaca pertanyaan terkait ini , yang berisi daftar beberapa kritik pengawasan, dan menyebutkan restart sebagai kemungkinan lain.

Akhirnya, jika Anda menginginkan sesuatu yang sangat mudah diatur, saya telah sukses besar dengan monit . Itu juga dikemas dalam Debian .

Francois G
sumber
2
daemontools luar biasa; monit adalah mimpi buruk yang menakutkan dari "kenapa kamu tidak memulai?!?" frustrasi.
womble
2

mengawasi atau mengawasi baik untuk menjaga satu proses hidup. Karena Anda meminta agar proses "satu atau lebih" tetap hidup, saya ingin memasang pengawas . Ini tentu saja berlebihan untuk mengelola satu proses, tetapi jika Anda perlu melacak beberapa proses, itu mungkin menjadi tugas Anda.

Bittrance
sumber
2

Salah satu opsi adalah menggunakan /etc/inittabalih-alih memasukkan skrip Anda /etc/init.d/.

Anda cukup menambahkan entri dalam format berikut:

<jobname>:<runlevels>:respawn:<command>

Sayangnya ini berarti Anda tidak dapat menggunakan perintah init start / stop / restart normal, tetapi harus memastikan skrip Anda berjalan sepanjang waktu.

Alex
sumber
2

Cara distribusi silang dari proses penanganan kembali dimulai dengan cron dan skrip sederhana. Anda dapat melihat Langgan di sini Cara menjaga pekerjaan tetap berjalan di Linux

Scriptnya terlihat seperti

#!/bin/bash 
# make-run.sh 
# make sure a process is always running.  
# Add the following to the crontab (i.e. crontab -e)
# */5 * * * * /home/path_to_make_run/make-run.sh

process=servermonitoringhq 
makerun="/home/path_to_the_job_you_want_running/runjob.sh"  

if pgrep $process > /dev/null         
then                 
  exit         
else         
  $makerun &         
fi 
Ian Purton
sumber