Как я могу автоматически перезапустить процесс после его завершения?

11

У меня есть программа golang, которую я хочу перезапустить после ее завершения в окне Debian Squeeze. Все дело в том, чтобы обслуживать HTTP за настройкой Apache 2 mod_proxy. Я не ожидаю, что процесс потерпит неудачу, но я хотел бы иметь некоторую страховку от этого.

В Ubuntu я бы использовал upstart, чтобы поддержать процесс. Debian не нравится Upstart из того, что я понимаю, поскольку это замена инициализации.

Есть ли альтернатива, которая перезапускает один или несколько процессов после их завершения, которая работает на Squeeze и хорошо играет с init?

Исключен
источник
Не могли бы вы перефразировать ваш вопрос? Вы хотите перезапустить процесс после его завершения?
mailq
Я хотел бы перезапустить процесс автоматически, если он выходит из строя или завершает сам.
удалено
2
Традиционная программа init делает именно это. Почему люди подумали, что было бы неплохо использовать init для запуска сценария оболочки, вызывающего сценарий оболочки, который запускает другой процесс, который делает то же самое, но без автоматической паники и перезагрузки ядра, если этот процесс когда-нибудь завершится неудачей, совершенно мне не подходит.
Саймон Рихтер
Это справедливо. Я буду исследовать только с помощью init. Я упаковываю программное обеспечение с помощью dpkg, поэтому создание сценариев инициализации не должно быть затруднительным.
удалено

Ответы:

10

Лучший способ сделать это - daemontools. Они позволяют вам отслеживать и возрождать процессы.

Смотрите документацию на их сайте: http://cr.yp.to/daemontools.html

mailq
источник
1
Спасибо - вот что я хочу. DJB = хорошо, как правило. На самом деле я должен был вспомнить, что существовало, тратя 5 лет на уход за qmail!
удалено
То же самое со мной, за исключением того, что я некоторое время присматривал за djbdns.
13
10

supervise - это легкая и эффективная альтернатива. Под Debian он упакован в daemontools . Вы также можете прочитать этот связанный вопрос , в котором перечислены некоторые критические замечания по надзору и упоминается перезапуск в качестве другой возможности.

Наконец, если вы хотите что-то невероятно простое в настройке, у меня был большой успех с monit . Он также упакован в Debian .

Франсуа Г
источник
2
daemontools потрясающий; monit - это ужасный кошмар "почему, черт возьми, ты не начнешь ?!" разочарование.
womble
2

Контроль или мониторинг хороши для поддержки одного процесса. Поскольку вы просите поддерживать "один или несколько" процессов, я бы хотел включить супервизор . Это, конечно, излишне для управления одним процессом, но если вам нужно отслеживать несколько процессов, это может быть вашим делом.

Bittrance
источник
2

Один из вариантов - использовать /etc/inittabвместо того, чтобы вводить свой скрипт /etc/init.d/.

Вы просто добавляете запись в следующем формате:

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

К сожалению, это означает, что вы не можете использовать обычные команды инициализации start / stop / restart, но это должно гарантировать, что ваш скрипт работает все время.

Alex
источник
2

Кросс-дистрибутивный способ обработки перезапуска процесса - cron и простой скрипт. Вы можете увидеть рецензию здесь. Как сохранить работу в Linux

Сценарий выглядит примерно так

#!/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 
Ян Пертон
источник