Существует ли инструмент оболочки, который берет произвольный исполняемый файл и создает из него обнаруживаемый перезапускаемый фоновый процесс?

Если бы мне пришлось написать это сам, я бы использовал $PIDFILE и что-то вроде ...

if [ -f $PIDFILE ] && ps -p `cat $PIDFILE` &> /dev/null; then
    # Already running, kill, restart
else
    # Stale pidfile, start
fi

Похоже, что есть программа, которая делает это в тысячу раз лучше, чем все, что я придумал. Есть?

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

3 ответа3

0

В системах Debian есть start-stop-daemon . Я рекомендую использовать это, и если вы не используете Debian или Ubuntu, просто скопируйте этот скрипт из Debian и попробуйте.

0

Если вы хотите сделать это в сценарии оболочки, вы можете использовать подоболочки и сделать что-то вроде:

#!/bin/bash
(
while true; do
  echo "I'm process A"
  sleep 1
done
) &
(
while true; do
  echo "I'm process B"
  sleep 3
done
) &
wait
wait

Команды в скобках выполняются в фоновом режиме, потому что, если амперсанд и команды ожидания гарантируют, что родительские сценарии не завершаются. Можно сэкономить pid в подоболочках, сэкономив $! после каждой подоболочки.

0

Исторически такой мониторинг процесса осуществлялся программой init . Сегодня init может быть заменен вашей операционной системой одной из нескольких предложенных замен: upstart , systemd , launchd (более подробный список см. На http://en.wikipedia.org/wiki/Init ). Проверьте, какая ваша ОС использует, чтобы увидеть, как она создает и контролирует длительные процессы.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .