Eu tenho um script de inicialização para um aplicativo e sei que o PID está disponível no script. Eu estou tentando adicionar alguma lógica ao comando status para a saída das portas de escuta TCP associadas ao PID. Eu li as respostas para Como listar todas as conexões de rede atuais para um determinado PID? , mas ainda não estou certo de qual se encaixa melhor neste caso.
Isso não é crítico, mas eu gostaria que fosse o mais portátil possível, e garantiria que ele falharia graciosamente se não pudesse ser executado. Até agora eu criei algumas alternativas, mas não tenho certeza de qual é a mais portável (ambas funcionam no meu ambiente de teste), ou se há uma maneira melhor de fazer isso.
Aqui está o que eu fiz até agora:
lsof -anP -i -p $APP_PID -sTCP:LISTEN -Fn | \
sed -e '/^n/ !d; /127.0.0.1/ d; s/n.*:\(.*\)//' | sort -h | paste -s -d','
netstat -tlpn | grep $APP_PID | \
awk '$4!~/127.0.0.1/ {split($4,listener,":"); print listener[2]}' | \
sort -h | paste -s -d','
(Eu provavelmente poderia trabalhar esse grep no awk, mas não estou tão familiarizado com o awk)
Ambos produzem uma lista como esta:
4500,9233,9475,27000
Existe alguma boa maneira de testar o que devo executar se um comando vs outro estiver disponível na máquina de destino? Ou é uma combinação de comandos superior ao outro em termos de portabilidade em geral? (Você pode assumir um destino do Linux e, além de echo
, o script usa apenas funções definidas pelo LSB)