Comando Solaris para parar de escutar em uma porta

2

Eu tenho um aplicativo legado (que não controle) que ocasionalmente falha sem fechar corretamente as portas em que ele está escutando. Existe um comando do Solaris para parar de escutar em uma determinada porta, sem reiniciar a caixa?

    
por parcel 14.10.2011 / 16:02

2 respostas

3

Bem. Você precisa encontrar o processo que se foi zumbi, ou deixou de ser utilizável, para encontrar a porta que ainda está aberta. Se você souber o nome do processo ou o PID, isso é muito útil para usar com comandos como pfiles , preap e pkill .

Eu tenho um script que pode pesquisar PIDs ou nomes de processos para portas abertas.

#!/usr/bin/ksh -p

process=$1

# if $1 is all numbers, then assume it's a PID, and get the parent process.
if [[ $process = +([0-9]) ]]; then
        for pid in $( ptree $process | grep '^[0-9]' | awk '{print $1}' ); do
                pfiles $pid | egrep "^$pid:|sockname"
        done
else
# if $1 is/has letters, then assume it's a process name, and grep accordingly.
        for pid in $( ptree | grep $process | grep '^[0-9]' | awk '{print $1}' ); do
                pfiles $pid | egrep "^$pid:|sockname"
        done
fi

Isso imprimirá o PID, o processname e todos os sockets abertos para qualquer processo que corresponda a $ 1.

Uma vez que você sabe exatamente qual PID está mantendo aquele socket aberto, e não sendo utilizável, você pode usar um dos comandos pkill ou preap para forçosamente fechar aquele PID e os descritores de arquivo que ele abriu.

    
por 14.10.2011 / 21:11
1

Se a porta ainda estiver no estado de escuta, o aplicativo ainda estará de alguma forma em execução. Use o comando lsof -i para verificar qual processo ainda está escutando e mate-o.

Se você não tem a ferramenta lsof instalada, você deve procurar o ps -ef para os processos ainda em execução do seu aplicativo.

    
por 14.10.2011 / 16:09

Tags