Jak mogę automatycznie zrestartować proces po jego zakończeniu?

11

Mam program golang, który chcę zrestartować po zakończeniu działania w oknie Debian Squeeze. Chodzi o to, aby obsługiwać HTTP za konfiguracją mod_proxy Apache 2. Nie spodziewam się, że proces się nie powiedzie, ale chciałbym mieć jakieś ubezpieczenie.

Na Ubuntu użyłbym upstart, aby utrzymać proces przy życiu. Debian nie lubi Upstartu z tego, co rozumiem, ponieważ jest to zamiana init.

Czy istnieje alternatywa, która ponownie uruchamia jeden lub więcej procesów po ich zakończeniu, która działa na Squeeze i dobrze gra z init?

Usunięte
źródło
Czy mógłbyś przeformułować swoje pytanie? Czy chcesz zrestartować proces po jego zakończeniu?
mailq
Chciałbym zrestartować proces automatycznie, jeśli sam się uszkodzi lub zakończy.
Usunięte
2
Tradycyjny program init robi dokładnie to. Dlaczego ludzie myśleli, że dobrym pomysłem byłoby użycie init do uruchomienia skryptu powłoki wywołującego skrypt powłoki, który uruchamia inny proces, który robi to samo, ale bez automatycznej paniki jądra i ponownego uruchomienia komputera, jeśli ten proces kiedykolwiek się nie powiedzie, jest całkowicie poza mną.
Simon Richter,
To słuszna kwestia. Zbadam również użycie init. Pakuję oprogramowanie za pomocą dpkg, więc tworzenie skryptów inicjujących nie powinno być trudnym zadaniem.
Usunięte

Odpowiedzi:

10

Najlepszym sposobem na to są daemontools. Pozwalają monitorować i odradzać procesy.

Zobacz dokumentację na ich stronie internetowej: http://cr.yp.to/daemontools.html

mailq
źródło
1
Dzięki - właśnie o to mi chodzi. DJB = z reguły dobry. Powinienem był pamiętać, że istniało to po spędzeniu 5 lat na opiece nad qmailem!
Usunięte
To samo dotyczy mnie, tyle że od dłuższego czasu opiekowałem się djbdns.
mr.b
10

superwizja to lekka, wydajna alternatywa. W Debianie jest pakowany w Daemontools . Możesz również przeczytać to pokrewne pytanie , w którym wymieniono niektóre krytyki nadzorowane, a wzmianki wznowiono jako kolejną możliwość.

Wreszcie, jeśli chcesz czegoś niezwykle łatwego w konfiguracji, odniosłem wielki sukces dzięki monitorowi . Jest także zapakowany w Debianie .

Francois G.
źródło
2
daemontools jest niesamowity; monit jest cholernym koszmarem „dlaczego, do diabła, nie zaczniesz?!?” udaremnienie.
womble
2

nadzór lub monitorowanie są dobre do utrzymania jednego procesu przy życiu. Ponieważ prosisz o utrzymanie jednego lub więcej procesów przy życiu, chciałbym podłączyć nadzór . Jest to z pewnością przesada w zarządzaniu jednym procesem, ale jeśli musisz śledzić wiele procesów, może to być Twoja sprawa.

Bittrance
źródło
2

Jedną z opcji jest użycie /etc/inittabzamiast wstawiania skryptu /etc/init.d/.

Po prostu dodajesz wpis w następującym formacie:

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

Niestety oznacza to, że nie możesz używać normalnych poleceń start / stop / restart init, ale powinno to zapewnić ciągłe działanie skryptu.

Alex
źródło
2

Cross-dystrybucja sposobu ponownego uruchamiania procesu odbywa się za pomocą crona i prostego skryptu. Tutaj możesz zobaczyć opis Jak utrzymać pracę w systemie Linux

Skrypt wygląda mniej więcej tak

#!/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
źródło