У меня есть программа 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