como atrasar corretamente a execução de um script de inicialização com base em uma condição testada?

2

Eu preciso iniciar um serviço (ou seja, ntp ) somente quando a verdadeira conectividade com a Internet estiver em vigor (não apenas um link). Parece que percebi que alguns scripts de inicialização se atrasam quando uma condição não é atendida (geralmente até que um dispositivo de rede esteja disponível).

Como fazer isso corretamente em um script de inicialização?

  • o script de inicialização executaria uma verificação (outro script)
  • com base no resultado, ele realmente iniciaria o serviço ou seria atrasado por algum tempo e executaria novamente a verificação

Posso imaginar uma condição bash while , mas o script estaria bloqueando e, antes de começar a trabalhar em segundo plano, queria fazer com que não houvesse uma solução pronta para uso, incorporada ao mecanismo e ao ambiente de inicialização.

Observação: este é um acompanhamento de pergunta sobre dependências de script de inicialização .

    
por WoJ 09.04.2014 / 13:20

1 resposta

0

Iniciar um script no momento da inicialização e fazer com que ele espere que a rede apareça seria uma maneira estranha e complicada de fazer o que você quer, que é executar algo quando a rede aparece.

Se você quiser fazer alguma coisa quando a rede aparecer, adicione-a aos scripts de inicialização da rede, e não aos scripts de inicialização do sistema. Systemd e Upstart os unificam, mas o Debian wheezy usa um sistema init tradicional, que apenas gerencia a inicialização (e mudanças de nível de execução).

Em Debian e derivados, você pode colocar um script para executar quando surge uma interface em /etc/network/if-up.d/ .

Se você precisar monitorar a conectividade da Internet em vez da conectividade de rede, precisará fazer várias coisas:

  1. Escolha uma definição de conectividade de rede. A Internet não é centralizada; você só pode verificar se um determinado host está respondendo a uma solicitação específica. Isso pode ser afetado por firewalls ao longo do caminho.
  2. Decida quanto tempo a rede pode ficar inativa antes de reagir. Isso depende do que você deseja alcançar. Se você escolher um intervalo muito curto, um pacote descartado simples fará com que você decida erroneamente que a rede está inoperante. Se você escolher um intervalo muito longo, não detectará a falha na conectividade rapidamente.

Não há uma maneira mágica de conseguir isso. A maneira mais óbvia é entrar em contato com o servidor escolhido para (1.), em um loop que dorme por um tempo escolhido para (2.) entre tentativas de contato. Essa é a única maneira de detectar quando a conectividade é iniciada. Há outras maneiras de observar a perda de conectividade, como abrir uma conexão TCP e enviar pacotes de tempos em tempos nessa conexão aberta.

Existem três abordagens possíveis:

  • Coloque um crontab que testa a conectividade em intervalos regulares, salve o estado em um arquivo e reaja quando o estado mudar.
  • Ter um script de shell (ou outro) em execução para sempre, que faz um loop contínuo em todo o teste de conectividade.
  • Use um ferramenta de monitoramento
por 11.04.2014 / 02:34