Як я можу автоматично перезапустити процес після його закінчення?


11

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

У Ubuntu я б застосував нову швидкість, щоб зберегти процес живим. Debian не любить Upstart з того, що я розумію, як це заміна init.

Чи існує альтернатива, яка перезапускає один або декілька процесів після того, як вони закінчуються, що працює на Squeeze і добре грає з init?


Чи можете ви перефразувати своє запитання? Це ви хочете перезапустити процес після його припинення?
mailq

Я хотів би перезапустити процес автоматично, якщо він вийшов з ладу або припинився.
Видалено

2
Традиційна програма init робить саме це. Чому люди думали, що було б гарною ідеєю використовувати init для запуску скрипта оболонки, що викликає скрипт оболонки, який запускає інший процес, який робить те саме, але без автоматичної ядра паніки та перезавантаження, якщо цей процес коли-небудь завершиться невдачею, абсолютно не в мені.
Саймон Ріхтер

Це справедливий момент. Я буду досліджувати лише використання init. Я пакую програмне забезпечення за допомогою dpkg, тому створення init-скриптів не повинно бути труднощами.
Видалено

Відповіді:


10

Найкращий шлях для цього - це daemontools. Вони дозволяють відстежувати та відновлювати процеси.

Дивіться документацію на їх веб-сайті: http://cr.yp.to/daemontools.html


1
Спасибі - це саме те, що я після цього. DJB = добре, як правило. Я фактично мав би пам’ятати, що існувало те, що витрачало 5 років на догляд за електронною поштою!
Видалено

Те саме зі мною, за винятком того, що я доглядав djbdns досить довгий час.
mr.b

10

supervise - це легка, ефективна альтернатива. Під debian він упакований у демон . Ви також можете прочитати це пов'язане питання , в якому перераховані деякі наглядові зауваження, і згадується перезапустити як іншу можливість.

Нарешті, якщо ви хочете щось надзвичайно легко налаштувати, я мав великий успіх з monit . Він також упакований в Debian .


2
daemontools приголомшливий; monit - це страхітливий кошмар "чому чорт не почнеш?!?" розчарування.
живіт

2

нагляд чи моніт хороші тим, що підтримують живий процес. Оскільки ви просите зберегти "один чи декілька" процесів живими, я хотів би підключити нагляд . Це, безумовно, надмірність управління одним процесом, але якщо вам потрібно буде відслідковувати кілька процесів, це може бути вашою справою.


2

Один із варіантів - використовувати /etc/inittabзамість того, щоб ставити свій сценарій /etc/init.d/.

Ви просто додаєте запис у такому форматі:

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

На жаль, це означає, що ви не можете використовувати звичайні команди start / stop / restart init, але це повинно гарантувати, що ваш сценарій працює весь час.


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 
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.