You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Supervisord能否调用node.js进程Health API或执行shell命令做健康检查

Supervisord 健康检查三类可行性问题解答

三类需求均可以实现,具体实现逻辑和方案如下:

1. 调用Node.js进程的Health API实现健康检查

Supervisord本身没有内置HTTP请求调用能力,但可以通过自定义脚本间接实现该需求:

  • 编写自定义检查脚本(可使用Shell、Python、Node.js等任意语言),在脚本中调用目标Node.js进程暴露的Health API,校验返回状态码、响应内容是否符合预期
  • 若检查判定服务异常,在脚本中调用supervisorctl restart <目标进程名>指令完成进程重启
  • 可通过定时任务、Supervisord事件监听器两种方式触发脚本执行

2. 借助Supervisord事件机制开发健康检查功能

该方案是Supervisord官方支持的原生扩展方式,实现的健康检查能力可以和Supervisord生命周期深度绑定:

  • 基于Supervisord的事件监听协议开发自定义EventListener脚本,在脚本内实现健康检查逻辑
  • 在Supervisord配置文件中注册该事件监听器,可通过监听TICK_60类定时事件实现每N秒自动触发检查,也可监听PROCESS_STATE_RUNNING事件在目标进程启动后自动触发首次检查
  • 检查异常时可直接通过Supervisord的XML-RPC接口或supervisorctl指令操作进程状态
    参考配置示例:

[eventlistener:custom_health_check]
command=python3 /opt/health_check/listener.py
events=PROCESS_STATE_RUNNING,TICK_60
user=appuser
autostart=true

3. 通过执行Shell命令的方式完成健康检查

该方案是落地成本最低的常用方案,有两种常见实现方式:

  • 定时任务触发:将健康检查逻辑写为Shell脚本,配置crontab定时执行,检查不通过时调用supervisorctl指令操作进程
  • 事件监听器触发:在刚才提到的Supervisord EventListener脚本中调用Shell命令完成检查逻辑
    Shell健康检查脚本示例:
#!/bin/bash
# 检查目标Node.js服务健康接口状态
HTTP_CODE=$(curl -s -w "%{http_code}" http://127.0.0.1:3000/health -o /dev/null)
if [ ${HTTP_CODE} -ne 200 ]; then
  # 异常时重启进程
  supervisorctl restart nodejs_service
fi

内容的提问来源于stack exchange,提问作者Sana.91

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 13:06:02