windows下监控emqx需用emqx_ctl status精准验证服务状态,秒级批处理脚本实现检测-杀进程-重启闭环,并记录带时间戳的结构化日志;python服务则用psutil匹配脚本路径并可加内存阈值判断。
windows环境下监控关键进程,核心目标是及时发现异常、自动干预、保留可追溯记录。不依赖第三方服务,用系统自带工具或轻量脚本就能落地,关键是选对检测方式、设好响应逻辑、留好日志痕迹。
用 emqx_ctl status 精准判断 EMQX 状态
直接查 beam.smp.exe 进程是否存在不可靠——Erlang 进程可能挂着但服务已无响应。必须调用 EMQX 自带的控制命令验证实际服务能力:
- 执行 emqx_ctl status | findstr "Node 'emqx@127.0.0.1' is started"
- 只匹配到这整行输出,才代表服务真正就绪
- 建议先手动运行该命令,确认返回格式与你的 EMQX 版本一致(如节点名含端口或主机名差异)
批处理脚本实现秒级循环监控
比任务计划程序更灵活:支持 5–30 秒级检查频率,失败后立即重启,且全程后台静默运行:
- 用 mshta vbscript:CreateObject("WScript.Shell").Run("%~s0 ::",0,FALSE)(window.close) 隐藏 CMD 窗口
- 主循环包含三步:状态检测 → 异常则 taskkill /f /im beam.smp.exe → 启动新实例
- 启动命令推荐加 /b 参数(
start /b cmd /c "%EMQX_PATH%\bin\emqx start"),避免弹窗干扰
结构化日志辅助故障回溯
所有动作都写入独立日志文件,每条记录带精确到分钟的时间戳,便于快速定位问题时段:
- 日志路径建议设在 EMQX 安装目录下,如 %EMQX_PATH%\emqx_monitor.log
- 典型记录格式:
[2026-06-05 12:03] EMQX is not running. Restarting. - 日志内容涵盖正常心跳、重启触发、启动成功三类事件,不记录冗余信息
Python 脚本适用于通用 Python 进程监控
若需监控自研 Python 服务(如爬虫、API 后端),psutil + subprocess 组合更稳妥:
- 用 proc.cmdline() 匹配完整脚本路径,避免误杀其他 python.exe 进程
- 检测逻辑示例:
if arg.endswith('my_service.py') and os.path.basename(arg) == 'my_service.py' - 重启前可加内存/CPU 检查:
proc.memory_info().rss > 500 * 1024 * 1024(超 500MB 强制重启)











