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

Как отслеживать несколько экземпляров одного и того же процесса с помощью Monit

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

В настоящее время я это делаю так.

check program maintain_workers with path maintain_workers.sh user "command p1" 5
    every "* * * * *"
    if status != 0 then alert

Вызов этого скрипта:

# Maintain the number of programs at certain limit
USER=$1
COMMAND=$2
LIMIT_WORKERS=$3
NUM_WORKERS=`pgrep -u "$USER" -f "$COMMAND" | wc -l`
if [ $NUM_WORKERS -lt $LIMIT_WORKERS ]
then
        STARTNUM=$(( $LIMIT_WORKERS - $NUM_WORKERS ))
        echo "Only $NUM_WORKERS workers detected. Starting $STARTNUM workers"
        for (( i=0; i < STARTNUM ; i++ ))
        do
            $COMMAND &
            echo "Ran worker $(( i + 1 ))"
        done
fi

# Do a final check
NUM_WORKERS=`pgrep -u "$USER" -f "$COMMAND" | wc -l`
exit $(( $LIMIT_WORKERS - $NUM_WORKERS ))

Но это не позволяет мне отслеживать использование процессора или памяти для каждого экземпляра.

Другой способ - просто иметь n из этих:

check process command0 with pidfile command0.pid
    start = "command.sh start 0"
    stop = "command.sh stop 0"

Но, очевидно, масштабировать это гораздо сложнее, и я считаю, что должен быть способ получше. Может кто-нибудь мне помочь? Спасибо!