Llegando a buen puerto
Tengo que dejar de hacer estos juegos de palabras tan ridículos…
Aprovecharemos las tribulaciones de parte del equipo de Sybase para comentar un par de trucos sobre puertos y procesos, que es algo que viste mucho y resulta muy útil y facil.
Supongamos una situación más que típica. Una instancia de base de datos ha dado un error y se está intentando parar. Como el error ha dejado un montón de procesos colgando de un puerto, no se puede parar hasta que se eliminen uno a uno. Pero ¿cuales son esos procesos?.
Partamos de la base de que conocemos cual es el puerto de la aplicación. No me digan que o lo saben, porque cualquier administrador de bases de datos digno de su nombre deberia conocer ese dato. Hombre ya.
Emplearemos lsof para ver qué está escuchando por ahí
root@madhatter # lsof |grep -i esta|grep 2640 dataserve 15366 sybase 51u IPv4 0x513f9aec060 0t0 TCP madhatter-ce0:45880->madhatter-ce0:2640 (ESTABLISHED)
Bueno, pues podemos ver que se trata de una instancia Sybase lanzada con un par de dataservers por debajo.
En fin, vamos al meollo de la cuestión, averiguar cuales son todos los procesos que están escuchando. Filtremos un poco las opciones de lsof, buscando un puerto concreto y un estado concreto: LISTEN. En caso necesario, también se podría buscar procesos vinculados a un puerto buscando por BOUND.
root@madhatter # lsof -i | egrep LISTEN|grep 2640 aocarga_S 5770 root 101u IPv4 0x3079c7fa4b8 0t0 TCP *:2640 (LISTEN) aocarga_S 6742 root 101u IPv4 0x3079c7fa4b8 0t0 TCP *:2640 (LISTEN) aocarga_S 7303 root 101u IPv4 0x3079c7fa4b8 0t0 TCP *:2640 (LISTEN) aocarga_S 7982 root 101u IPv4 0x3079c7fa4b8 0t0 TCP *:2640 (LISTEN) aocarga_S 9387 root 101u IPv4 0x3079c7fa4b8 0t0 TCP *:2640 (LISTEN) aocarga_S 9574 root 101u IPv4 0x3079c7fa4b8 0t0 TCP *:2640 (LISTEN) aocarga_S 10571 root 101u IPv4 0x3079c7fa4b8 0t0 TCP *:2640 (LISTEN) sleep 12052 root 101u IPv4 0x3079c7fa4b8 0t0 TCP *:2640 (LISTEN) sleep 12063 root 101u IPv4 0x3079c7fa4b8 0t0 TCP *:2640 (LISTEN) sleep 12066 root 101u IPv4 0x3079c7fa4b8 0t0 TCP *:2640 (LISTEN) sleep 12070 root 101u IPv4 0x3079c7fa4b8 0t0 TCP *:2640 (LISTEN) sleep 12071 root 101u IPv4 0x3079c7fa4b8 0t0 TCP *:2640 (LISTEN) sleep 12074 root 101u IPv4 0x3079c7fa4b8 0t0 TCP *:2640 (LISTEN) sleep 12075 root 101u IPv4 0x3079c7fa4b8 0t0 TCP *:2640 (LISTEN) sleep 12078 root 101u IPv4 0x3079c7fa4b8 0t0 TCP *:2640 (LISTEN) sleep 12080 root 101u IPv4 0x3079c7fa4b8 0t0 TCP *:2640 (LISTEN) sleep 12084 root 101u IPv4 0x3079c7fa4b8 0t0 TCP *:2640 (LISTEN) sleep 12085 root 101u IPv4 0x3079c7fa4b8 0t0 TCP *:2640 (LISTEN) aocarga_S 16192 root 101u IPv4 0x3079c7fa4b8 0t0 TCP *:2640 (LISTEN) aocarga_S 20088 root 101u IPv4 0x3079c7fa4b8 0t0 TCP *:2640 (LISTEN) fcunw 22710 root 101u IPv4 0x3079c7fa4b8 0t0 TCP *:2640 (LISTEN) aocarga_S 22714 root 101u IPv4 0x3079c7fa4b8 0t0 TCP *:2640 (LISTEN) aocarga_S 22715 root 101u IPv4 0x3079c7fa4b8 0t0 TCP *:2640 (LISTEN) fcunw 22768 root 101u IPv4 0x3079c7fa4b8 0t0 TCP *:2640 (LISTEN) fcunw 27050 root 101u IPv4 0x3079c7fa4b8 0t0 TCP *:2640 (LISTEN) fcunw 27372 root 101u IPv4 0x3079c7fa4b8 0t0 TCP *:2640 (LISTEN)
Quizás deberíamos hablar un día del fascinante mundo de los puertos…
Y como gran final, lo unimos todo en una línea gracias a la magia de UNIX
root@madhatter # lsof -i | egrep LISTEN|grep 2640 |nawk ' {print $2}'
Caballeros, ya pueden empezar a mandar kills a estos procesos para que mueran ordenadamente. Ar!.