windows下通过端口监控服务

一般大部分服务都会部署在Linux环境里,但是有些服务因为历史原因,还是采用Windows环境。此时要自动拉起这个服务,一种可行的方法是根据进程名称来拉起,这种方法在遇到多个服务的进程名称都一样时就不管用了。这种情况下,可以考虑使用端口来判断服务是否正常。假设服务监听3001端口,我们可以通过过滤netstat命令的输出来判断该端口是否处于listen状态。

判断一个端口是否在listen一般会这么写:

netstat -nao | findstr LISTEN | findstr :3001 | find /c /v ""

根据返回的结果是否为0来判断,这种写法能够处理大部分情况,但是当这台机器同时也在30010端口listen时,就会得到错误的结果。

之所以会判断错误,是因为我们其实是想寻找:listen端口是3001的行,而不是listen端口字符串包含3001的行,也就是说3001的最后一位应该是字符串的结尾了,怎么用batch脚本来表达呢?

windows下可以这么写:

netstat -nao | findstr LISTEN | findstr /r /C:":3001\>" | find /c /v ""

 Linux下可以这么写

netstat -tanp | grep LISTEN  | grep -w 3001 | wc -l

 如果只想过滤IPv4的就这样写

netstat -tanp | grep LISTEN  | grep -w tcp | grep -w 3001 | wc -l

同时,我们希望将这个结果保存到一个变量中,在Windows下要实现这个目的不像Linux下那么方便,Linux下可以使用反引号来赋值,例如

num=`netstat -tanp | grep LISTEN | grep -w 3001 | wc -l`

Windows下可以借助for语句来实现

for /f %%i in ('netstat -nao ^| findstr LISTEN ^| findstr /r /C:":3001\>" ^| find /c /v ""') do set num=%%i

关于for语句为什么这么写,可以参考这篇文章

Reading the output of a command into a batch file variable - The Old New Thing

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值