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

Monit не перезапускает процесс при убийстве

Я установил monit на свой сервер Deabian со следующей конфигурацией:

set logfile /var/log/monit.log

check process myprogram with pidfile /var/run/myprogram.pid
    start program = "/etc/init.d/myprogram start"
    stop program = "/etc/init.d/myprogram stop

при выдаче: /etc/init.d/monit start служба поднимается и запускается myprogram должным образом.

Если я вручную убью свою программу, я ожидал, что monit перезапустит ее автоматически, но заметил, что monit теряется. Он не только не перезапускает процесс, но и процесс мониторинга завершается и не может быть перезапущен (/etc/init.d/monit start говорит ОК, но процесс не запускается. Нет данных в файле журнала).

Я могу перезапустить все, только если удалю /var/run/myprogram.pid, поэтому у меня есть следующие вопросы:

а) Каков интервал по умолчанию, в течение которого мониторинг проверяет процесс? б) будет полагаться на мониторинг /var/run/myprogram.pid? Я не уверен, что этот файл будет удален в случае сбоя .... в) Почему при убийстве процесса не пришлось перезапускать monit?

Пожалуйста, посоветуйте, что я могу делать не так ...

Моя программа init.d скрипт /etc/init.d/myprogram:

#!/bin/bash

#
# Program parameters
#
NAME=myprogram
DIR=/usr/local/bin/myprogram/bin
AEIRTU_HOME=/usr/local/bin/myprogram

#
# Internal variables
#
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
EXEC=$DIR/$NAME
PIDFILE=/var/run/$NAME.pid

if ! [[ -x "$EXEC" ]]
then
    echo "File '$EXEC' is not executable or not found. Aborting."
fi

function start_app {
    echo "Starting $NAME...";
    cd $DIR
    AEIRTU_HOME=$AEIRTU_HOME nohup "$EXEC" 1>>"/var/log/$NAME.log" 2>&1 &
    echo $! > "/var/run/$NAME.pid"
    echo "$NAME started ok";
}

function stop_app {
    echo "Stopping $NAME...";
    if [[ -e "$PIDFILE" ]]
    then
        kill `cat /var/run/$NAME.pid`
        echo "$NAME stopped."
    else
        echo "Cannot stop $NAME...";
    fi
}

case $1 in
start)
start_app ;;
stop)
stop_app ;;
restart)
stop_app
sleep 5
start_app
;;
*)
echo "usage: myprogram {start|stop|restart}" ;;
esac
exit 0

а) Каков интервал по умолчанию, в течение которого мониторинг проверяет процесс? Это определяется либо:

  • установить глобально с SET DAEMON <секунды>
  • установить на уровне правила с
    • КАЖДЫЙ [номер] ЦИКЛ
    • КАЖДЫЙ [cron]
    • НЕ КАЖДЫЙ [cron]

б) Будет ли monit полагаться на /var/run/myprogram.pid? Monit проверит, запущена ли программа с номером pid, содержащимся в файле. если программа с этим pid не существует, Monit примет действие, как определено в правиле, когда Monit проснется.

в) Почему при убийстве процесса не происходит принудительного перезапуска monit? Вероятно, Монит тем временем не проснулся из-за УСТАНОВИТЬ DAEMON слишком важно. Когда Монит будит каждого УСТАНОВИТЬ DAEMON интервал, он ищет правила, которые необходимо проверить.