Я установил 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
а) Каков интервал по умолчанию, в течение которого мониторинг проверяет процесс? Это определяется либо:
б) Будет ли monit полагаться на /var/run/myprogram.pid? Monit проверит, запущена ли программа с номером pid, содержащимся в файле. если программа с этим pid не существует, Monit примет действие, как определено в правиле, когда Monit проснется.
в) Почему при убийстве процесса не происходит принудительного перезапуска monit? Вероятно, Монит тем временем не проснулся из-за УСТАНОВИТЬ DAEMON слишком важно. Когда Монит будит каждого УСТАНОВИТЬ DAEMON интервал, он ищет правила, которые необходимо проверить.