我有一个自定义进程(一个 elixir 应用程序)正在运行。我想为其设置 monit。我正在 /etc/monit.d 中设置 monit 检查,如下所示:
set daemon 30
check host meraj-pc with address 192.168.3.124
start program = "/meraj/app/ex_app/check_port.sh start"
stop program = "/meraj/app/ex_app/check_port.sh stop"
if failed port 4000 type tcp protocol http then start
check_port.sh 文件是:
case $1 in
start)
sh /meraj/app/ex_app/startup.sh & echo $! > /var/run/ex_app.pid ;
;;
stop)
pkill -F /var/run/ex_app.pid ;;
*)
echo "usage: checkport {start|stop}" ;;
esac
exit 0
而 startup.sh 文件包含 elixir 应用程序的实际启动命令,例如混合清洁&&混合编译&& iex -S混合phx.server
现在,当启动 monit 时,它继续给我这个错误(当时我的 4000 端口上的服务没有运行):
8 月 10 日 10:40:48 meraj monit[28316]:'meraj-pc' 协议测试失败 [HTTP] at [192.168.3.124]:4000 [TCP/IP] -- 连接被拒绝 8 月 10 日 10:40:48 meraj monit[28316]:'meraj-pc' start:'/meraj/app/ex_app/check_port.sh start'
如果应用程序在 4000 上运行,它会在监控日志中显示此消息:
8 月 10 日 10:43:19 meraj monit[28316]:'meraj-pc' 连接成功至 [192.168.3.124]:4000 [TCP/IP]
我不知道为什么它无法按预期在失败状态下执行启动过程。有人可以查看一下并告诉我是否遗漏了什么吗?