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.