Script de shell para parar de repetir o mesmo email se já tiver encontrado um erro e enviado

1

Eu escrevi um script que pede uma palavra no log e envia um e-mail se essa palavra (erro) for encontrada, o script for executado a cada hora e se essa palavra (erro) for encontrada, um dia e no dia seguinte log inicia novamente e o erro não pode ser encontrado.

Então, o script que está sendo executado a cada hora me envia a cada hora mesmo e-mail, se esse erro for encontrado, como posso parar de enviar depois de 2 ou de uma vez.

if grep 'error' "/path to log"; then
    echo "error found" | mailx -s "error alert" email-id
fi
    
por Aravind 29.01.2018 / 17:07

1 resposta

0

Você pode usar uma segunda condição que use alguma variável (ou arquivo) como sinalizador (ou contador).

Por exemplo, para usar um arquivo como sinalizador, você pode modificar seu script desta maneira:

#!/bin/bash

FLAG_FILE="/tmp/flag_file_my_error_email_script"

if grep -iq 'error' "/path/to/log" && [ ! -f "${FLAG_FILE}" ]; then
        echo "error found" | mailx -s "error alert" email-id
        touch "$FLAG_FILE"
fi

O comando touch "$FLAG_FILE" criará o arquivo /tmp/flag_file_my_error_email_script que é usado como argumento na segunda condição [ ! -f "${FLAG_FILE}" ] . Leia sobre expressões condicionais Bash .

Se você quiser enviar / receber um determinado número de e-mails e, em seguida, suprimir a função do script, adicione a terceira condição, em que o conteúdo do $FLAG_FILE será usado como contador :

#!/bin/bash

FLAG_FILE="/tmp/flag_file_my_error_email_script"

if grep -iq 'error' "/path/to/log" && [ ! -f "${FLAG_FILE}" ] || (( $(cat "$FLAG_FILE") < 2 )); then
        echo "error found" | mailx -s "error alert" email-id
        touch "$FLAG_FILE"
        NEW_VALUE=$(( $(cat "$FLAG_FILE") + 1)) && echo "$NEW_VALUE" > "$FLAG_FILE"
fi

Note que && tem um significado de se a condição anterior retornar true e || significa se a condição anterior retornar false .

Se você quiser restaurar o trabalho "normal" do script, remova o $FLAG_FILE . Este arquivo será automaticamente excluído na reinicialização do sistema. Se você quiser mudar esse comportamento, escolha um diretório diferente de /temp , onde o usuário que executa o script tem permissões de gravação.

    
por pa4080 29.01.2018 / 19:37