Monit 在终止时不会重新启动进程

Monit 在终止时不会重新启动进程

我已经在我的 Deabian 服务器上安装了 monit,配置如下:

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 迷失了方向。它不仅不会重新启动进程,而且 monit 进程已完成,无法重新启动(/etc/init.d/monitstart 说 OK,但进程没有出现。日志文件中没有数据)。

如果我删除,我只能重新启动所有内容/var/run/myprogram.pid,所以我有以下问题:

a) monit 检查进程的默认间隔是多少?b) monit 会依赖吗/var/run/myprogram.pid?我不确定崩溃时这个文件是否会被删除....c) 为什么终止进程并没有强制 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

答案1

a) monit 检查进程的默认间隔是多少?这可以定义为:

  • 使用以下方式全局设置设置守护进程<秒数>
  • 在规则级别设置
    • 每 [数字] 个周期
    • 每个 [cron]
    • 并非每个 [cron]

b) monit 是否依赖 /var/run/myprogram.pid?Monit 将检查是否有程序正在使用文件中包含的 pid 号运行。如果不存在具有此 pid 的程序,则 Monit 将在 Monit 唤醒时按照规则中定义的操作。

c) 为什么终止进程没有强制 monit 重新启动?可能是由于设置守护进程太重要了。当 Monit 唤醒每个设置守护进程间隔,它会寻找需要验证的规则。

相关内容