service started from sh script para quando sh script

0

Eu tenho um serviço chamado "roteador" que pode receber solicitações http.
Eu decidi escrever sh script que irá verificar periodicamente a saúde do serviço de roteador. se algo estiver errado, então ele irá reiniciá-lo.

O problema:
Se o roteador foi iniciado com esse script, se esse script for encerrado, o serviço de roteador também será encerrado. O mais estranho é que um simples script sh de uma linha que simplesmente faz "service router restart" - funciona bem (então ele reinicia o serviço e fecha imediatamente e está tudo bem)

eu suponho que a razão esteja em algum lugar no loop ou em algum bash se as coisas.
código de script anexado ...
Obrigado pela ajuda!

#!/bin/bash

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

1 resposta

1

A seguir, o processo de execução do script bash:

  1. Bash bifurca um filho que executa outra bash.
  2. Esse filho bash interpreta o script, bifurcando filho e executando programas conforme necessário.

Todos os programas que você executa no script, tem esse filho como o terminal de controle.
Então, agora se o filho bash termina todos os programas normalmente terminam.

Como o filho bash não retorna até que o script saia, você não pode trabalhar no pai bash.
Então você pode precisar executar o filho bash (isso significa que o script) em segundo plano. Que
permite que você continue seu trabalho. Background bash não termina (a menos que você diga ou há alguma falha).

    
por 16.06.2013 / 19:58