Назад | Перейти на главную страницу

Выполнить пользовательский сценарий мониторинга при неудачном перезапуске процесса

У меня есть случай, когда пустые файлы PID создаются определенными процессами, которые контролируются монитором. Monit НЕ так хорош в обработке пустых файлов и пытается перезапустить процесс, даже если процесс уже запущен, и продолжает выдавать ошибки в журнале мониторинга.

Я думаю о реализации специального сценария для обработки этого, когда monit видит файл PID, с помощью которого не удалось перезапустить этот процесс, запустить этот настраиваемый сценарий и повторно заполнить файл PID PID уже запущенного процесса.

Я не могу написать часть «если не удалось» для запуска этого настраиваемого сценария. Если это какой-то серверный процесс с портом и протоколом, я могу написать его, но только для фонового процесса я НЕ уверен, как справиться с этим случаем.

Предполагаемая конфигурация Monit, но не удается скомпилировать при запуске "monit -t"

Пожалуйста, помогите предложить правильную конфигурацию для обработки сбоев перезапуска монитора.

Спасибо.

# 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

Мониторинг файла журнала:


[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

Сценарий, который я написал для заполнения файла PID, если этот процесс запущен.

#!/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

Это довольно плохой подход к проблеме, которую вы пытаетесь решить. Вам действительно нужны ваши агенты / драйверы для мониторинга HP быть стабильным и не падать...

В любом случае, если вы не собираетесь решать основную проблему, вы можете просто проинструктировать Monit используйте имя процесса вместо PID.

check process cmaeventd
        matching "cmaeventd"
        start program = "/etc/init.d/cmaeventd start"
        stop program = "/etc/init.d/cmaeventd stop"