Назад | Перейти на главную страницу

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

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

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

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

контролировать это легкая и эффективная альтернатива. В Debian он упакован в DAEMON Tools. Вы также можете прочитать это связанный вопрос, в котором перечислены некоторые критические замечания со стороны руководства и упоминаются перезапущен как еще одна возможность.

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

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

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

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

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

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

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

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

Перекрестный способ обработки перезапуска процесса - 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