Bir işlemi sona erdikten sonra otomatik olarak nasıl yeniden başlatabilirim?


11

Debian Squeeze kutusunda sona erdikten sonra yeniden başlatmak istediğim bir golang programım var. Mesele HTTP'yi bir Apache 2 mod_proxy kurulumunun arkasında sunmaktır. Sürecin başarısız olmasını beklemiyorum ama buna karşı sigorta yaptırmak istiyorum.

Ubuntu'da süreci canlı tutmak için uptart'ı kullanırdım. Debian, bir init değiştirme olduğu için anladığım kadarıyla Upstart'ı sevmiyor.

Squeeze üzerinde çalışan ve init ile güzel oynayan bir veya daha fazla işlemi sonlandırdıktan sonra yeniden başlatan bir alternatif var mı?


Lütfen sorunuzu yeniden ifade eder misiniz? Bir işlemi sonlandırıldıktan sonra yeniden başlatmak istediğiniz mi?
mailq

Bir işlemi hata verirse veya sonlandırırsa otomatik olarak yeniden başlatmak istiyorum.
Silinmiş

2
Geleneksel başlangıç programı tam da bunu yapar. İnsanlar neden aynı şeyi yapan başka bir işlemi başlatan bir kabuk komut dosyasını çağıran bir kabuk komut dosyası çalıştırmak için init kullanmanın iyi bir fikir olacağını düşündüler, ancak bu işlem başarısız olursa otomatik bir çekirdek paniği ve yeniden başlatma olmadan tamamen benden öte.
Simon Richter

Bu adil bir nokta. Sadece init kullanarak da araştıracağım. Yazılımı dpkg kullanarak paketliyorum, bu yüzden init komut dosyaları oluşturmak zor olmamalı.
Silindi

Yanıtlar:


10

Bunun için gitmenin en iyi yolu daemontools. İşlemleri izlemenizi ve yeniden doğmanızı sağlar.

Web sitelerindeki belgelere bakın: http://cr.yp.to/daemontools.html


1
Teşekkürler - sadece peşimden geliyorum. DJB = kural olarak iyi. Aslında 5 yıl qmail bakarken ne var olduğunu hatırlamalıydım!
Silinmiş

Benimle aynı, sadece djbdns'e bir süre bakardım.
mr.b

10

süpervizyon hafif ve verimli bir alternatiftir. Debian altında daemontools içinde paketlenmiştir . Ayrıca , bazı denetleme eleştirilerini listeleyen ve yeniden başlatmadan başka bir olasılık olarak söz eden bu ilgili soruyu da okuyabilirsiniz .

Son olarak, kurulumu son derece kolay bir şey istiyorsanız, monit ile büyük başarı elde ettim . Ayrıca Debian'da paketlenmiştir .


2
daemontools harika; monit "neden cehenneme başlamıyorsun?!?" hüsran.
womble

2

süpervizyon veya monit, tek bir süreci canlı tutmak için iyidir. "Bir veya daha fazla" süreci canlı tutmanızı istediğinden, süpervizörü bağlamak istiyorum . Tek bir işlemi yönetmek için aşırı derecede ağırdır, ancak birden fazla işlemi takip etmeniz gerekiyorsa, bu sizin işiniz olabilir.


2

Bir seçenek, /etc/inittabkomut dosyanızı koymak yerine kullanmaktır /etc/init.d/.

Aşağıdaki biçimde bir girdi eklemeniz yeterlidir:

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

Ne yazık ki bu, normal start / stop / restart init komutlarını kullanamayacağınız anlamına gelir, ancak komut dosyanızın her zaman çalıştığından emin olmalıdır.


2

Yeniden başlatma işleminin çapraz dağıtım yolu, cron ve basit bir komut dosyasıdır. Burada bir yazı görebilirsiniz Linux'ta bir iş nasıl çalışır

Senaryo şuna benzer

#!/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 
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.