sábado, 13 de agosto de 2011

[Ubuntu] Problema de acesso a socket

Estava usando o LLDP Daemon, que implementa o LLDP (Link Layer Discovery Protocol) para PC, e me deparei com um erro bem chato que não deixava que o serviço funcionasse a não ser que o PC fosse reiniciado:

ctl_connect: unable to connect to socket /var/run/lldpd.socket: Connection refused
fatal: unable to connect to socket /var/run/lldpd.socket

Este problema foi decorrente da execução de um 'killall':

sudo killall -9 lldpd

Parece que ao utilizar o 9 (SIGKILL), que mata o processo imediatamente, o programa não conseguia remover o socket que utilizava antes. Então, para resolver o problema foi necessário remover o socket manualmente. Antes é aconselhável listar o conteúdo do diretório com permissões administrativas, de preferência:

sudo ls -l /var/run

Se o socket problemático existe de fato, remova-o com:

sudo rm /var/run/lldpd.socket

De fato observei que utilizando o 'killall' com o SIGTERM (15) o problema não ocorria, pois por definição o SIGTERM emite um aviso ao processo e aguarda alguns instantes e, em teoria, isso deve permitir que o processo finalize seus recursos antes.

sudo killall -15 lldpd

Desta forma, pode-se reiniciar o processo sem problemas, e observar que ao matar o processo assim, o socket também é excluído.

Talvez este cuidado deva ser levado a outros processos também, pois problemas com acesso a sockets são bem comuns nestes casos.

..D..

Nenhum comentário:

Postar um comentário