У меня есть случай, когда пустые файлы 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"