Como proteger um script de shell contra a falta de controle?

7

Eu recentemente tive uma experiência de escrever um script de shell que travou um servidor (e danificou uma partição) consumindo todos os recursos. Ele foi ligado a um cron job, e parece que demorou mais para ser executado do que o intervalo entre as execuções, com o tempo ficando sem controle.

Agora, eu já o modifiquei para registrar seu estado de execução e não para executar mais de uma vez simultaneamente. Minha pergunta é: existem outras maneiras simples de salvaguardar um script contra causar danos? Existe uma lista padrão de coisas que um script deve fazer para se comportar corretamente, não consumir muitos recursos, falhar graciosamente, alertar as pessoas certas, etc?

Basicamente: que outras armadilhas devo evitar?

    
por Steve Bennett 23.01.2012 / 07:07

3 respostas

4

Os computadores fazem exatamente o que eles dizem. A única maneira de garantir que um script "se comporte corretamente" é escrevê-lo para que ele se comporte adequadamente, em todos os cenários.

Alguns conselhos básicos:

  1. Implementar algum tipo de sistema de monitoramento.
    O fato de que seu sistema explodiu sem você saber que estava vindo me diz que você não tem um sistema de monitoramento, ou o seu sistema atual não é bom o suficiente. Invista algum tempo para garantir que seus servidores informem que há um problema antes em que eles caem.
  2. Incluir proteções apropriadas em scripts executados no cron.
    Seu script deu um passo à frente. Isso não deveria acontecer.
    Você aprendeu da maneira mais difícil que precisa se proteger contra esse tipo de coisa (e fazer com que o sistema o notifique se isso acontecer).
  3. Projete e teste com mais detalhes.
    Avalie cuidadosamente cada script que você implantará para garantir que ele não produza efeitos colaterais indesejáveis. Se você puder imaginar um cenário de falha, teste-o (e manuseie-o corretamente!). Reserve um tempo para simular falhas (seja codificando a condição para true em seu script ou gerando as circunstâncias para testar sua lógica de detecção.
por 23.01.2012 / 08:33
0

As salvaguardas das quais você está falando dependem do que seu script está fazendo. Por exemplo, será melhor fazer backup de algum arquivo importante antes de modificá-lo de maneira automática. Se o script falhar de alguma forma e corromper esse arquivo importante, você estará seguro porque tem backup e assim por diante.

Uma coisa importante a mencionar é o registro, registro e registro em log . Se o seu script estiver sendo executado em segundo plano sem um arquivo de log mostrando seu progresso e o que está fazendo, você não terá idéia sobre nenhum possível problema no futuro próximo ou distante. Não se esqueça de incluir o registro de data e hora de cada entrada de registro e ativar o serviço NTP para saber exatamente a que horas isso aconteceu.

    
por 23.01.2012 / 09:32
0

No final, agora executamos o script dentro de uma VM. Isso limita enormemente o escopo de danos que podem ser causados.

O mais assustador sobre o Linux (pelo menos para mim) é que pequenos erros de digitação ou bugs podem ter efeitos devastadores. Mesmo algo como executar um comando com $ {VARIABLE} pode ter um significado totalmente diferente (e destrutivo) se essa variável estiver em branco ou contiver um espaço.

    
por 14.02.2012 / 05:52