Porta em Uso

Porta em Uso (EADDRINUSE)

Descrição do Problema

Ao iniciar o gateway, você recebe erro indicando que a porta já está em uso:

Error: listen EADDRINUSE: address already in use :::3000
Error: Port 3000 is already in use
bind: Address already in use

Possíveis Causas

  1. Instância anterior rodando - Gateway não foi parado corretamente
  2. Outro serviço na porta - Nginx, Apache, outro app
  3. Processo zumbi - Processo travado ocupando a porta
  4. Container Docker - Container antigo ainda rodando

Soluções

1. Identificar o Processo

# Ver qual processo está na porta 3000
lsof -i :3000

# Alternativa com netstat
netstat -tulpn | grep 3000

# Alternativa com ss
ss -tulpn | grep 3000

2. Matar o Processo

# Matar por PID (substitua pelo número real)
kill -9 <PID>

# Matar processos do clawdbot
pkill -f clawdbot

# Matar processo na porta específica
fuser -k 3000/tcp

3. Usar Outra Porta

# Iniciar em porta diferente
clawdbot gateway start --port 3001

# Ou configurar no arquivo
# ~/.clawdbot/config.yaml
gateway:
  port: 3001

4. Verificar Containers Docker

# Listar containers
docker ps -a | grep clawdbot

# Parar container
docker stop <container_id>

# Remover container parado
docker rm <container_id>

5. Parar Outros Serviços

# Parar Nginx
sudo systemctl stop nginx

# Parar Apache
sudo systemctl stop apache2

# Verificar o que está rodando
sudo systemctl list-units --type=service --state=running

6. Limpar Processos Zumbis

# Encontrar processos zumbis
ps aux | grep -w Z

# Ver processos do node
ps aux | grep node

# Matar todos os processos node (cuidado!)
killall node

Script de Diagnóstico

#!/bin/bash
PORT=${1:-3000}

echo "Verificando porta $PORT..."

# Verificar se está em uso
if lsof -i :$PORT > /dev/null 2>&1; then
    echo "Porta $PORT está em uso!"
    echo ""
    echo "Processo:"
    lsof -i :$PORT
    echo ""
    read -p "Deseja matar o processo? (s/n) " -n 1 -r
    echo
    if [[ $REPLY =~ ^[Ss]$ ]]; then
        fuser -k $PORT/tcp
        echo "Processo finalizado!"
    fi
else
    echo "Porta $PORT está livre!"
fi

Problemas Relacionados

Prevenção

  • Sempre pare o gateway corretamente com clawdbot gateway stop
  • Use portas diferentes para cada serviço
  • Configure healthchecks para detectar processos travados
  • Use process managers como PM2 ou systemd