
Estou tentando usar o NTP para atualizar a hora na minha máquina. No entanto, isso me dá um erro:
host # ntpdate ntp1.example.org
10 Aug 12:38:50 ntpdate[7696]: the NTP socket is in use, exiting
O que significa o erro "soquete em uso"? Como posso ver o que está usando esse soquete?
Isso acontece no meu sistema CentOS 4.x, mas também vejo isso no FreeBSD 7.x, Ubuntu 10.04 e Solaris 10.
Responder1
Você pode fazer
lsof -n | grep -i "TCP\|UDP" | grep -v "ESTABLISHED\|CLOSE_WAIT"
para ver todas as suas portas de escuta, mas dólares em donuts que o ntpd está executando:
service ntpd status
E quanto a "O que significa soquete em uso"? Se eu puder ser perdoado por suavizar algumas rugas (e pela explicação básica, desculpas pela maior parte disso é corretivo para você)...TCP/IP (a linguagem da Internet) especifica que cada computador tem um endereço IP, que identifica exclusivamente esse computador na Internet. Além disso, existem 65.000 portas numeradas em cada endereço IP às quais você pode se conectar.
Quando você deseja se conectar a um servidor web, você abre o site em seu navegador, mas o mecanismo abaixo está, na verdade, conectando você à porta 80 no IP do servidor web. O daemon do servidor web (o programa que escuta conexões com a porta 80) usa um "soquete" para manter aberta essa porta, reservando-a para si. Apenas um programa pode usar a mesma porta por vez.
Como você estava com o ntpd em execução, ele estava usando essa porta. 'ntpdate' tentou acessar essa porta, mas como ela já estava aberta, você recebeu o erro 'soquete já em uso'.
Editar
Alterado para contabilizar UDP também
Responder2
Você também pode usar o netstat para procurar soquetes abertos - é muito mais limpo do que usar lsof como os outros pôsteres sugeriram. Experimente esta linha de comando como root
netstat -lp -u -t
para visualizar todas as conexões de escuta, incluindo seus pids e programas associados. O parâmetro -l é o que especifica conexões de escuta, -p especifica que você deseja ver o PID/nome e -t e -u informam ao netstat que você deseja apenas conexões TCP e UDP (IPv4 e IPv6).
Se você quiser ver nomes numéricos de portas e hosts (ou seja, não resolvidos no caso de hosts, e não transformados em nomes de serviços no caso de portas), você pode adicionar -n
à linha de comando acima.
EDITAR:Isso funciona no Linux - não sei se funciona bem no BSD, pois não tenho nenhuma caixa baseada em BSD por aí.
Responder3
No FreeBSD, você também pode usar o Sockstat caso lsof não funcione para você (por exemplo, em sistemas virtualizados que não possuem /dev/mem por qualquer motivo). Para obter uma lista de todos os programas com soquetes IPv4 de escuta:
sockstat -l4
Responder4
Você pode usar lsof
para descobrir qual aplicativo está usando este soquete.