我想使用服务名称获取所有正在运行的端口,但某些端口名称为java。
以下给定端口正在使用ansible进行获取。
ansible -m listen_ports_facts --user =用户名--become --ask-become-pass --tree portdir /全部
tcp:8011:java
tcp:8012:java
tcp:8013:java
我该怎么办?请在同一位置提出建议。
我已经尝试过ps -aux | grep“ PID”,发现有目录路径。
由于Java就像VM,如果不了解Java进程本身,就无法真正看到Java Process正在提供什么服务。通常,您使用参数运行Java VM-诸如java -jar /path/to/my/program.jar
或在Wildfly等情况下。某些参数显示standalone
的路径或其他。该参数可以提示您JavaVM正在运行什么。但这并不容易以一般方式进行过滤。
还有一些Java进程正在同一PID下打开多个端口(例如Wildfly打开端口以服务Java-Webcontainer以及某些管理Web UI等。
因此,快速的答案是-否-您通常无法通过检查端口来找出什么是Java VM。但是也许在SpringBoot的情况下,您可以将服务名称与-jar <program>.jar
的参数值进行匹配,然后将设置为服务名称。另外-例如在Tomcat的情况下-没有-jar参数,而是类似java -cp ... -D..=.. org.apache.catalina.startup.Bootstrap ..
的类名-向您显示这是Tomcat(代号Catalina)。我不确定是否有简单/准确的方法来标识classname参数...
在某些情况下,这对您无济于事-因为可能有多个端口,并且某些PID服务于相同的<program>
。无论您使用哪种方式(例如,您说它在端口8011上为Wildfly或Tomcat服务)。这都是通用的。
[如果您需要知道端口上的内容,则可以解析该程序的配置(这意味着您需要了解过程结构),例如Tomcat将Webcontainers存储在/ webapps / *下。战争。并且因为在那里可能运行的不仅仅是一项服务(战争),所以该端口可能不是“一项”服务所独有的。
如果您的Java进程始终使用相同的端口,则可以将此端口添加到/etc/services
或在您的环境中使用key = port,value = servicename进行命令以静态映射端口-服务名映射。当端口服务名称不匹配时,您也可以添加警告。