Как проверить, успешно ли запущен демон как часть скрипта? - PullRequest
0 голосов
/ 22 марта 2020

Допустим, у меня есть этот сценарий:

start daemon1 &
start daemon2 &
echo "Running..."

daemon2 может быть запущен только в случае успешного запуска daemon1. если daemon1 не запустился успешно, то сценарий, наиболее прерванный

"Running...", должен отображаться только в случае успешного запуска daemon2. если daemon2 не запустился успешно, то скрипт будет прерван

Как я могу сделать это с помощью скрипта оболочки?

Ответы [ 2 ]

2 голосов
/ 22 марта 2020

Вы можете проверить PID запущенного процесса, чтобы увидеть, запущен ли он

start daemon1 &
P=$!
if kill -0 $P > /dev/null 2>&1 ; then 
    start daemon2 &
    P=$!
    if kill -0 $P > /dev/null 2>&1 ; then
        echo "Running..."
    fi
fi

Непроверенный код. Прокомментируйте, если что-то не так

1 голос
/ 22 марта 2020

Я предлагаю вам перехватить pid демона (идентификатор процесса), а затем определить, существует ли pid (после некоторой задержки, если daemon1 требуется некоторое время для запуска процесса, и обработайте sh). Итак, вот способ достижения этого (в Linux я игнорирую 'start' в ваших командах, поскольку я не знаком со средой windows cmdline):

start daemon1 &
pid1=$!
sleep 3 # give daemon1 some time to get going 
if  
  kill -0 $pid1 2>/dev/null
then
  start daemon2 &
  pid2=$!
  sleep 3 # give daemon2 some time to get going 
  if
     kill -0 $pid2 2>/dev/null
  then
     echo "Running..."
  fi
fi

необходимые ингредиенты для этого рецепта:

  1. $! возвращает pid ребенка (последнего запуска фонового процесса)

  2. kill -0 <pid> is способ определения допустимости pid (в таблице процессов)

...