Quiero buscar todos los puertos en ejecución con el nombre del servicio, pero algunos nombres de puertos son java.
Los puertos dados a continuación se obtienen usando ansible.
ansible -m listen_ports_facts --user = username --become --ask-Become-pass --tree portdir / all
tcp: 8011: java
tcp: 8012: java
tcp: 8013: java
¿Cómo puedo hacerlo? Por favor sugiera lo mismo.
Lo he intentado con ps -aux | grep "PID" y descubrió que hay una ruta de directorio.
Debido a que Java es como una máquina virtual, realmente no puede ver lo que está sirviendo el proceso de Java sin conocimiento sobre el proceso en sí. Normalmente, ejecuta una máquina virtual Java con parámetros, algo como java -jar /path/to/my/program.jar
o en el caso de Wildfly, etc., algunos parámetros muestran una ruta hacia standalone
o lo que sea. Este parámetro puede darle una pista sobre qué está ejecutando JavaVM. Pero eso no es fácil de filtrar de manera general.
Además, algunos procesos de Java están abriendo varios puertos bajo el mismo PID (como Wildfly abre puertos para servir el Java-Webcontainer y también para algunas interfaces de usuario web de administración, etc.).
Por lo tanto, la respuesta rápida es, no, no puede averiguar en general qué es una máquina virtual Java examinando los puertos. Pero tal vez, en el caso de SpringBoot, podría hacer coincidir el nombre del servicio con el valor del parámetro de -jar <program>.jar
y luego es el nombre del servicio. Además, por ejemplo, en el caso de Tomcat, no hay un parámetro -jar sino un nombre de clase como java -cp ... -D..=.. org.apache.catalina.startup.Bootstrap ..
, lo que le muestra que se trata de un Tomcat (nombre en clave Catalina). No estoy seguro de si hay una forma fácil / exacta de identificar el parámetro de nombre de clase ...
En algunos casos, esto no le ayudará, porque podría haber varios puertos y tal vez algunos PID sirvan lo mismo <program>
. O vive con eso (por ejemplo, dice, está sirviendo un Wildfly o un Tomcat en el puerto 8011. Eso es genérico.
Si necesita saber qué hay en ese puerto, podría ser posible analizar la configuración de esos programas (lo que significa que necesita conocimiento sobre la estructura del proceso), por ejemplo, un Tomcat lo almacena en Webcontainers en /webapps/*.war . Y debido a que podría haber más de un servicio (guerra) ejecutándose allí, el puerto podría no ser exclusivo de "un" servicio.
Si sus procesos Java utilizan siempre el mismo puerto, puede agregar estos puertos /etc/services
o hacer un dict en su entorno con key = port, value = servicename para mapear el mapeo puerto-servicename estáticamente. También puede agregar una advertencia, cuando un nombre de servicio de puerto no coincide.
Este artículo se recopila de Internet, indique la fuente cuando se vuelva a imprimir.
En caso de infracción, por favor [email protected] Eliminar
Déjame decir algunas palabras