Execute o script monit personalizado após a falha ao reiniciar o processo [duplicado]

1

Eu tenho um caso em que arquivos PID vazios estão sendo gerados por certos processos que são monitorados por monit. O Monit NÃO é tão bom em manipular arquivos vazios e tenta reiniciar o processo mesmo quando o processo já está em execução e continua gerando erros no log de monitoramento.

Estou pensando em implementar um script personalizado para lidar com isso quando monit vir um arquivo PID usando o qual ele falhou ao reiniciar esse processo, executar esse script personalizado e preencher novamente o arquivo PID com o PID do processo já em execução. / p>

Não estou conseguindo gravar a parte "if failed" para executar este script personalizado. Se for algum processo de servidor com porta e protocolo, posso escrever um, mas apenas para um processo em segundo plano NÃO tenho certeza sobre como lidar com isso case

Configuração intencionada do Monit, mas falha ao compilar quando eu executo "monit -t"

Por favor, ajude sugerindo a configuração correta para lidar com falhas de reinicialização de monit.

Obrigado.

# Check for cmaeventd process
check process cmaeventd with pidfile /var/run/cmaeventd.pid
group snmp-agents
start program = "/opt/hp/hp-snmp-agents/storage/etc/cmaeventd start"
stop program = "/opt/hp/hp-snmp-agents/storage/etc/cmaeventd stop"
if failed (restart|start) then exec "/tmp/pidchk.sh cmaeventd"
if 2 restarts within 3 cycles then timeout

Monit logfile:


[PST Feb  3 18:18:20] error    : monit: Error reading pid from file '/var/run/cmaidad.pid'
[PST Feb  3 18:18:21] error    : monit: Error reading pid from file '/var/run/cmaidad.pid'
[PST Feb  3 18:18:22] error    : 'cmaidad' failed to start

[PST Feb  3 18:19:22] error    : 'cmaidad' service restarted 2 times within 2 cycles(s) - unmonitor


Empty PID file:
logbash-3.1# ps -ef|grep cmaidad|grep -v grep
root     32298     1  0 18:14 ?        00:00:01 cmaidad -p 15 -s OK -l /var/log/hp-snmp-agents/cma.log
logbash-3.1# cat /var/run/cmaidad.pid

logbash-3.1# ls -l /var/run/cmaidad.pid
-rw-r--r-- 1 root root 1 Feb  3 18:14 /var/run/cmaidad.pid

Script que escrevi para preencher o arquivo PID, se esse processo estiver em execução.

#!/bin/bash
# To re-populate the empty PID files which were NOT populated by the hp-snmp scripts
AGNTFILEPATH=/var/run

#different distros put pidof in different places
if [ -f /sbin/pidof ]; then
  PIDOF=/sbin/pidof
elif [ -f /bin/pidof ]; then
  PIDOF=/bin/pidof
fi

#add pid into agent file
addpidintofile() {
                PIDOFAGNT='$PIDOF -o $$ -o $PPID -o %PPID -x $PNAME > /dev/stdout | cut -d " " -f1' 2> /dev/null
                if [ -f $AGNTFILEPATH/$PNAME.pid ]; then
                        echo "$PIDOFAGNT" > $AGNTFILEPATH/$PNAME.pid
                fi
}

PNAME=$1
cnt='ps -ef|grep $PNAME|grep -v grep|wc -l'
if [ cnt == 0 ]
    then
    exit 1;
else 
    addpidintofile
    exit 0;
fi
    
por gowin09 04.02.2015 / 04:30

1 resposta

1

Isso tudo é uma abordagem muito ruim para o problema que você está tentando resolver. Você realmente deseja que seus agentes / drivers de monitoramento da HP ser estável e não travar ...

De qualquer forma, se você não resolver o problema raiz, basta instruir a Monit para use o nome do processo em vez de um PID .

check process cmaeventd
        matching "cmaeventd"
        start program = "/etc/init.d/cmaeventd start"
        stop program = "/etc/init.d/cmaeventd stop"
    
por 04.02.2015 / 05:00