precisa adicionar outro loop

1

script que executa netstat -tulpun | grep -i port_from_the_list & pega a saída para executar o próximo comando
Eu preciso executar o comando 2 em todo o servidor mencionado na lista.

server: Jan port: 8000  
tcp 0 0 0.0.0.0:8000 0.0.0.0:* LISTEN 1505/httpd  

server: feb port: 8000  
tcp 0 0 0.0.0.0:8000 0.0.0.0:* LISTEN 1505/httpd    
  1. faça o login no servidor
  2. execute o primeiro comando netstat , que fornece a saída do ID do processo
  3. ps -ef | grep -i 1505 "processid" é executado, isso levará a saída do ID do processo & execute o comando ps

Saída aceita

server: Jan port: 8000  
tcp   0 0 0.0.0.0:8000 0.0.0.0:*    LISTEN 1505/httpd  

root      1421 15033  0 13:38 pts/16   00:00:00 grep -i 1505  

server: feb port: 8000  
tcp   0 0 0.0.0.0:8000 0.0.0.0:*    LISTEN 1505/httpd  

root      1421 15033  0 13:38 pts/16   00:00:00 grep -i 1505  

Não consigo ler a saída do comando netstat e executar o próximo.

while read -r -u10 server port line  
do  
echo ========== server: "$server" port: "$port" ==========  
ssh -qn "$server" "netstat -tulpun | grep -E \"\b$port\b\"" | awk '{print $7}' | grep "/" | awk -F "/" '{print $1}' | xargs -I % bash -c 'echo Port % && ps -ef | grep % && echo ' | grep -v grep
echo   
done 10< demo 
    
por Mongrel 13.01.2015 / 16:24

1 resposta

0

Você pode começar com

for port in $(cat demo); do
   mypid=$(netstat xxxx |
      grep ":${port} " | grep LISTEN | sed -e 's/.*LISTEN//'| cut -d/ -f1)
   ps -fp ${mypid}
done

Possíveis alterações (com o que você está familiarizado):

  • Use xargs para chamar ps em ... -f1) | xargs ps -fp
  • Use sed para cortar o /
  • Usar loop while em cat demo | while read port; do
por 14.02.2015 / 14:37