Script para enviar um alerta de email somente quando o estado de mudança de processo

1

Abaixo, o script verifica se o processo do MStrsvr está em execução ou não. O problema que estou enfrentando é se eu programar uma guia cron para executar esse script para cada 1 hora que ele emitirá um alerta de email a cada 1 hora que "MSTRSvr está em execução", o que eu não quero. Eu quero que o script ative o alerta apenas quando o servidor for interrompido / iniciado.

#!/bin/ksh
hos=$(hostname)

curr_Dt=$(date +"%Y-%m-%d %H:%M:%S")

var=$(ps -ef | grep -i '[/]MSTRSvr')

if [ -z "$var" ]
then

    echo "ALERT TIME : $curr_Dt" >>wa.txt
    echo "SERVER NAME : $hos" >>wa.txt
    echo "\n \n" >>wa.txt
    echo " MSTRSvr is not running on $hos Please check for possible impact " >>wa.txt
    echo "\n \n" >>wa.txt

    mail -s "MSTRSvr process ALERT" [email protected] <wa.txt

else

    echo "MSTRSvr is running" >>mi.txt

    mail -s "MSTRSvr process ALERT" [email protected] <mi.txt

fi

rm wa.txt 2>ni.txt
rm mi.txt 2>ni.txt
    
por star 28.02.2016 / 17:17

2 respostas

1

#-----------------------------------------------------------------------
#!/bin/ksh

hos=$(hostname)
curr_Dt=$(date +"%Y-%m-%d %H:%M:%S")

# I am going to get the process ID for the MSTRSvr.
ProcessPID=$(ps -ef | grep -i '[/]MSTRSvr' | grep -v grep | awk '{print $2}') 

if [[ -z ${ProcessPID} ]]; then
    # There is no PID, Not running!
    echo "ALERT TIME : $curr_Dt" >>wa.txt
    echo "SERVER NAME : $hos" >>wa.txt
    echo "\n \n" >>wa.txt
    echo " MSTRSvr is not running on $hos Please check for possible impact " >>wa.txt
    echo "\n \n" >>wa.txt
    mail -s "MSTRSvr process ALERT" [email protected] <wa.txt
else
    # The process is running check it against the last recorded PID.
    # You can also compare /tmp/MSTRSvr.pid with ${ProcessPID}.
    kill -0 'cat /tmp/MSTRSvr.pid' > /dev/null 2>&1
    if [[ $? -ne 0 ]]; then
       # The current PID does not match.
       echo "MSTRSvr was restarted." >>mi.txt
       # Update the tempfile with current running PID.
       echo ${ProcessPID}>/tmp/MSTRSvr.pid
       mail -s "MSTRSvr process ALERT" [email protected] <mi.txt
    fi
fi

rm wa.txt 2>ni.txt
rm mi.txt 2>ni.txt
#---------------------------------------------------------------------

Antes de executar este script pela primeira vez, crie o arquivo /tmp/MSTRSvr.pid e adicione '999999999' (número aleatório) ao arquivo. O comando 'check' em 'else' falhará e você receberá um e-mail dizendo ' MSTRSvr foi reiniciado 'ignore isso e continue ...

Assim, cada script de intervalo verificará o PID e, em seguida, verificará o último PID conhecido.

    
por 28.02.2016 / 18:02
0

Adicione um teste para o último estado do servidor:

#!/bin/ksh
hos=$(hostname)

curr_Dt=$(date +"%Y-%m-%d %H:%M:%S")

var=$(ps -ef | grep -i '[/]MSTRSvr')

if [ -z "$var" ]
then
    echo "ALERT TIME : $curr_Dt" >>wa.txt
    echo "SERVER NAME : $hos" >>wa.txt
    echo "\n \n" >>wa.txt
    echo " MSTRSvr is not running on $hos Please check for possible impact " >>wa.txt
    echo "\n \n" >>wa.txt

    echo "stopped" > "filewithlaststate.txt"

    mail -s "MSTRSvr process ALERT" [email protected] <wa.txt

else

    if [ "$(cat "filewithlaststate.txt")" != "running" ]
    then 
         echo "MSTRSvr is running" >>mi.txt

         echo "running" > "filewithlaststate.txt"

         mail -s "MSTRSvr process ALERT" [email protected] <mi.txt
    fi

fi

rm wa.txt 2>ni.txt
rm mi.txt 2>ni.txt
    
por 28.02.2016 / 17:59