Shell & Python 获取tomcat的启动端口方法与比较
问题背景:
项目有进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进行解析
这个貌似可行阿。试试呗:
完成了?就这么简单?扯吧你.......
tomcat监~听的先不说tomcat特殊多端口配置,就是基本的至少也有三个端口 shutdown、http 、jsp。怎么区分?
笨一点的办法是for循环用lsof -i 结果与pid比较是否相等,比如:
拿正则切割出纯端口号,然后在循环这两个port,测试哪个端口号losf后的pid与刚才的那个pid对应
方案可行,但是不够装逼!!!我这么爱装13,是绝对不会用这种方式的!
方案四:Linux下既然自带的Python,python又自带的xml解析器,干嘛不用?
明明几行代码就能搞定的事情,干嘛要那么费劲的去grep awk 正则....就好比明明我可以去天桥底下说书讲相声,为什么要干IT,哎.....
要善于思考阿,大兄弟。。。。
这种获取端口的方式,并不仅用于tomcat,也要学会发散性思考。
当然也许还有更好的方法没想出来,可以在评论区回复提供更好的方法阿。集思广益,共同进步
作者:王翔/一梦七年诗
- 点赞
- 收藏
- 关注作者
评论(0)