Como lidar com um programa pré-embalado que não adere à regra do silêncio?

4

Problema concreto:

Mailman vem com um script para sincronizar os assinantes da lista de discussão a partir de um arquivo simples (sync_members(8) ).

Este script não adere muito bem à Regra de silêncio . Por exemplo, quando não há nada para fazer (por exemplo, os assinantes atuais e o arquivo simples são os mesmos), ele imprime "Nada a fazer". para stdout .

Como estamos executando este programa a cada poucos minutos e qualquer saída é registrada em nosso servidor de log (com rsyslogd ) que, em seguida, envia e-mails diários com os registros, tendem a conter muitas mensagens inúteis.

Existem várias maneiras de lidar com isso e estou me perguntando qual é a mais apropriada:

  1. Pipe stdout a /dev/null .
  2. Use a filtragem do rsyslogd para filtrar especificamente essas mensagens.
  3. Modifique o código-fonte de sync_members para aderir à regra do silêncio.
  4. Copie o código-fonte de sync_members , modifique a cópia e use-a a partir de agora.

Enquanto cada um alcançaria o resultado desejado, cada um tem suas desvantagens:

  1. E se em algum momento houver algo interessante em stdout ?
  2. Parece uma solução "impura" e "hackerish" , e ouso dizer que existem muitos programas que não estão aderindo à Regra do Silêncio.
  3. O que acontece se houver uma atualização?
  4. O mesmo que 3.

Eu costumo escolher a opção 2, mas se eu tiver que fazer isso para cada programa mal comportado em nosso sistema ...

O que você acha? Existe uma opção adicional ou argumento a favor ou contra? Existe uma melhor prática para este caso (eu diria que este problema não é novo)?

    
por Christoph Wurm 08.10.2011 / 10:46

3 respostas

1

Duas sugestões:

  1. Registre um relatório de bug em mailman , para que o desenvolvedor possa corrigir o bug para todos.

  2. Altere a chamada synch_members para synch_members | egrep -v "Nothing to do." Isso eliminará o "Nada a fazer". mensagens.

por 10.10.2011 / 05:02
3

Você está com a opção 5 ausente: escrever um script de wrapper que redireciona a saída de sync_members e verifica se é ou não "nada a fazer".

Com a verificação correta do código de saída, isso pode fazer o trabalho muito bem. É uma atualização relativamente segura - contanto que a mensagem "nada" não mude, seu script não precisa ser mantido.

E você pode decidir como lidar com casos de erro nesse script (ou seja, apenas cat do arquivo de log ou fazer algo mais interessante).

    
por 08.10.2011 / 11:05
0

Se "Nothing to do" não varia (ou pode ser reduzido a um regex), você pode usar o grep assim:

    grep -v "Nothing to do" *.log

A partir daqui, há muitas coisas que você pode fazer para resolver seu problema:

  • redireciona a saída do comando acima para criar novos logs "silenciosos".
  • defina funções e aliases com base no comando acima para usar como atalhos nas sessões interativas (você pode até definir "Nada a fazer como uma variável de ambiente").
  • define cron jobs que automatizarão a execução de tais comandos em intervalos regulares.

Muito poderia ser feito com as ferramentas básicas do Unix e um shell moderno. Acho que é um pouco cedo demais para decidir modificar um código-fonte. Mantê-lo simples, evitará muito tempo perdido.

    
por 08.10.2011 / 13:14

Tags