Shell & Python 获取tomcat的启动端口方法与比较

举报
开发者学堂小助 发表于 2017/12/04 09:50:57 2017/12/04
【摘要】 想在每一个war包中添加了服务健康性检查,说白了就是一个最土的接口,调用返回OK,代表服务正常,否则表示服务挂了。好了,问题特么的来了,你要调取服务,需要IP:PORT/LINK....但是没有一个命令可以直接获取某个任务的port的阿。。。。

2017-12-04_094916.png

问题背景:


项目有进60个tomcat,部署着对应的war包。想在每一个war包中添加了服务健康性检查,说白了就是一个最土的接口,调用返回OK,代表服务正常,否则表示服务挂了。好了,问题特么的来了,你要调取服务,需要IP:PORT/LINK....


ip没什么,link涉及到了war包的名称,可以去动态构造,但是port呢?Linux下可以直接通过lsof -i:port获取PID,但是没有一个命令可以直接获取某个任务的port的阿。。。。


难点聚焦:


1、由于这套健康检查的方案是要上局点的,所以要求在不安装软件的前提下去支持;


2、tomcat等都是使用的普通用户去启动,而且局点禁止对这些用户赋权sodu。


解决思路:


方案一:由于服务集群管理使用的是zookeeper,最先考虑的是外部通过zookeeper去查service的port,然后。。


测试了一把通用区机器访问局点zookeeper集群的速度,差点哭了,辣么辣么多的服务,还没检查完,估计都改过年了,被否。。。


方案二:把所有tomcat对应的端口写到数据库或者配置文件里面?想到这个方法我就啪的扇了自己一巴掌,妈的这么多对应关系,部署时候有经常切换服务器,坐飞机做的脑子缺氧了,被否。。。


方案三:ps服务切割获取到这个服务的pid,然后通过netstat进行解析


这个貌似可行阿。试试呗:

2017-12-04_094116.png

完成了?就这么简单?扯吧你.......


2017-12-04_094226.png


tomcat监~听的先不说tomcat特殊多端口配置,就是基本的至少也有三个端口 shutdown、http 、jsp。怎么区分?


一点的办法是for循环用lsof -i 结果与pid比较是否相等,比如:


拿正则切割出纯端口号,然后在循环这两个port,测试哪个端口号losf后的pid与刚才的那个pid对应


2017-12-04_094247.png


方案可行,但是不够装逼!!!我这么爱装13,是绝对不会用这种方式的!


方案四:Linux下既然自带的Python,python又自带的xml解析器,干嘛不用?


2017-12-04_094308.png


明明几行代码就能搞定的事情,干嘛要那么费劲的去grep awk 正则....就好比明明我可以去天桥底下说书讲相声,为什么要干IT,哎.....


要善于思考阿,大兄弟。。。。


这种获取端口的方式,并不仅用于tomcat,也要学会发散性思考。


当然也许还有更好的方法没想出来,可以在评论区回复提供更好的方法阿。集思广益,共同进步



作者:王翔/一梦七年诗

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。