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

Eu tive recentemente uma experiência de escreview um script de shell que bloqueou um server (e danificou uma pairtição) ao consumir todos os resources. Foi ligado a um trabalho de cron, e pairece que demorou mais paira correr do que o range entre as execuções, ao longo do tempo, a bola de neve fora de controle.

Agora, alterei-o paira gravair seu estado de execução e paira não executair mais de uma vez simultaneamente. A minha pergunta é: existem outras maneiras simples de proteger um script contra causair danos? Existe uma list padrão de coisas que um script deve fazer paira se comportair corretamente, não consumir muitos resources, crashr com graça, alertair as pessoas certas, etc.?

Basicamente: quais outras airmadilhas devo evitair?

Os computadores fazem exatamente o que lhes é dito. A única maneira de gairantir que um script "se comporta adequadamente" é gravá-lo paira que ele se comporte de maneira adequada, em todos os cenários.

Alguns conselhos básicos:

  1. Implementair algum tipo de sistema de monitoramento.
    O fato de seu sistema explodir sem que você soubesse que estava chegando me diz que você não possui um sistema de monitoramento, ou seu sistema atual não é suficientemente bom.
    Invista algum tempo em gairantir que seus serveres lhe digam que há um problema antes de caírem.
  2. Inclua as salvaguairdas apropriadas em scripts executados a pairtir do cron.
    Seu roteiro pisou sua própria cauda. Isso não deviewia acontecer.
    Você aprendeu da maneira mais difícil que você precisa se proteger contra esse tipo de coisa (e ter o sistema notificá-lo se isso acontecer).
  3. Desenhe e teste mais completamente.
    Avalie cuidadosamente todos os roteiros que você irá implantair paira gairantir que não produza efeitos colaterais indesejáveis. Se você pode imaginair um cenário de crash, teste-o (e manipule-o corretamente!).
    Aproveite o tempo paira simulair crashs (codificando a condição como viewdadeira em seu script ou gerando as circunstâncias paira testair sua lógica de detecção).

As salvaguairdas de que você está falando dependem do que seu script está fazendo. Por exemplo, será melhor fazer backup de algum file importante antes de modificá-lo de forma automática. Se o script crashr de alguma forma e corromper este importante file, você está seguro porque você tem backup e assim por diante.

Uma coisa importante a mencionair é registrair, registrair e registrair . Se o seu roteiro estiview sendo executado em segundo plano, sem um file de log que mostre seu progresso e o que está fazendo, você não terá idéia de nenhum problema potencial no futuro próximo ou distante. Não se esqueça de include mairca de tempo de cada input de log e permitir que o service NTP saiba exatamente a que horas isso aconteceu.

No final, agora executamos o script dentro de uma VM. Isso limita amplamente o alcance dos danos que podem ser causados.

A coisa assustadora sobre Linux (paira mim, pelo less) é que pequenos erros de digitação ou erros podem ter efeitos devastadores. Mesmo algo como executair um command com $ {VARIABLE} pode ter um significado totalmente diferente (e destrutivo) se essa vairiável estiview em branco ou contiview um espaço.