Как мне написать bash-скрипт для перезапуска сервиса, если он умирает? - PullRequest
1 голос
/ 24 августа 2011

У меня есть программа, которая работает как демон, используя команду C fork ().Он создает новый экземпляр, который работает в фоновом режиме.Основной экземпляр существует после этого.

Как лучше всего проверить, работает ли служба?Я рассматриваю:

  • Создайте файл с идентификатором процесса программы и проверьте, работает ли он со сценарием.
  • Используйте ps | grep, чтобы найти программу в работающемсписок процессов.

Спасибо.

Ответы [ 3 ]

1 голос
/ 25 августа 2011

Я думаю, что будет лучше управлять вашим процессом с помощью supervisord или другой системы управления процессами.

0 голосов
/ 24 марта 2012

На вопрос, который вы дали в заголовке:

Этот простой бесконечный цикл перезапустит вашу программу, как только она выйдет из строя:

#!/bin/bash
for ((;;))
do
   yourProgram
done

Если ваша программа зависит от ресурса, который может дать сбой, было бы целесообразно вставить короткую паузу, чтобы избежать перехвата всех системных ресурсов при сбое миллион раз в секунду:

#!/bin/bash
for ((;;))
do
   yourProgram
   sleep 1
done

На вопрос из тела вашего поста:

Как лучше всего проверить, работает ли служба?

Если ваш ps имеет опцию -C (например, Linux ps), вы бы предпочли эту комбинацию ps ax | grep.

 ps -C yourProgram
0 голосов
/ 24 августа 2011

Создайте задание cron, которое запускается каждые несколько минут (или как вам удобно) и выполняет что-то вроде этого:

/path/to/is_script_stopped.sh && /path/to/script.sh

Напишите is_script_stopped.sh, используя любой из предложенных вами методов.Если ваш скрипт остановлен, cron оценит ваш скрипт, если нет, то не будет.

...