У меня есть служба с именем "маршрутизатор", которая может получать запросы HTTP.
Я решил написать скрипт sh, который будет периодически проверять работоспособность роутера.
если что-то не так, он перезапустит его.

Эта проблема:
если маршрутизатор был запущен с этим сценарием, то если этот сценарий завершен, то служба маршрутизатора также прекращается.
странно то, что простой однострочный сценарий sh, который просто выполняет "перезапуск маршрутизатора службы", работает нормально (поэтому он перезапускает службу и сразу закрывается, и все в порядке)

Я полагаю, причина в том, что где-то в цикле или что-то не так.
код сценария прилагается ...
Спасибо за помощь!

#!/bin/bash

while :
do
   STATUS=$(curl --silent localhost:80/test)
   if [ "$STATUS" != "OK" ]
   then
    echo "problems: $STATUS".
    service router restart
   fi
   sleep 5
done

1 ответ1

1

Ниже приведен процесс выполнения bash-скрипта:

  1. Bash разветвляет ребенка, который запускает другой Bash.
  2. Этот дочерний bash интерпретирует сценарий, разветвляя дочерние и выполняя программы по мере необходимости

Все программы, которые вы запускаете в скрипте, имеют этот дочерний bash в качестве управляющего терминала.
Итак, теперь, если дочерний bash завершает работу, все программы обычно завершаются.

Поскольку дочерний bash не возвращается до завершения работы скрипта, вы не можете работать с родительским bash.
Так что вам может потребоваться запустить дочерний bash (что означает скрипт) в фоновом режиме. Тот
позволяет продолжить работу Фоновый bash не заканчивается (если вы не говорите или есть какая-то ошибка).

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