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