Execute o crontab somente se a condição

4

Eu tenho um script bash que me envia e-mails sempre que um servidor da Web não está respondendo e o script é executado por cron a cada 5 minutos. No entanto, se o site ficar inativo por algumas horas, receberei muitas mensagens em vez de apenas uma.

Qual é a melhor maneira de enviar e-mails apenas uma vez? Devo usar uma variável de ambiente e verificá-la antes de enviar o e-mail / redefini-lo quando o servidor da web voltar a subir? Existem maneiras melhores de fazer isso (sem poluir o ambiente)? Estou fazendo algo bobo agora? Não estou confiante em minhas habilidades de script de shell.

#!/bin/sh

output=$(wget http://lon2315:8081 2>&1)
pattern="connected"

if [[ ! "$output" =~ "$pattern" ]]
then
    echo "$output" | mail -s "Website is down" "[email protected]"   
fi
    
por confused00 10.02.2015 / 11:03

2 respostas

6

Eu não acho que você possa usar variáveis de ambiente, pois elas não persistem entre "execuções" de script.

Como alternativa, você poderia gravar em um arquivo temporário em /tmp ou em algum lugar em seu diretório pessoal e verificá-lo sempre?

Por exemplo, algo como

#!/bin/sh

output=$(wget http://lon2315:8081 2>&1)
pattern="connected"
tempfile='/tmp/my_website_is_down'

if [[ ! "$output" =~ "$pattern" ]]
then
    if ! [[ -f "$tempfile" ]]; then
        echo "$output" | mail -s "Website is down" "[email protected]"
        touch "$tempfile"
    fi
else
    [[ -f "$tempfile" ]] && rm "$tempfile"
fi
    
por 10.02.2015 / 11:28
0

É um pouco sujo, mas eu colocaria um arquivo em /tmp ou algum outro lugar que fosse removido quando o servidor estivesse de volta novamente.

Talvez algo assim:

#!/bin/sh

output=$(wget http://lon2315:8081 2>&1)
pattern="connected"
websitedownfile="/tmp/websitedown"

if [[ ! "$output" =~ "$pattern" ]]; then

    if [[ -e $websitedownfile ]]; then
        echo "$output" | mail -s "Website is down" "[email protected]"
    fi
    touch $websitedownfile
else
    [[ -f $websitedownfile ]] && rm $websitedownfile
fi
    
por 10.02.2015 / 11:33

Tags