Gateway
Bloqueo del Gateway
Por qué
- Garantizar que solo se ejecute una instancia de Gateway por puerto base en el mismo host; los Gateways adicionales deben usar perfiles aislados y puertos únicos.
- Sobrevivir a fallos/SIGKILL sin dejar archivos de bloqueo obsoletos.
- Fallar rápido con un error claro cuando el puerto de control ya está ocupado.
Mecanismo
- El Gateway primero adquiere un archivo de bloqueo por configuración en el directorio de bloqueos de estado y sondea el puerto configurado para detectar un listener existente.
- Si el propietario de bloqueo registrado ya no existe, el puerto está libre o el bloqueo está obsoleto, el inicio recupera el bloqueo y continúa.
- Luego el Gateway enlaza el listener HTTP/WebSocket (predeterminado
ws://127.0.0.1:18789) usando un listener TCP exclusivo. - Si el enlace falla con
EADDRINUSE, el inicio lanzaGatewayLockError("another gateway instance is already listening on ws://127.0.0.1:<port>"). - Al apagarse, el Gateway cierra el servidor HTTP/WebSocket y elimina el archivo de bloqueo.
Superficie de error
- Si otro proceso ocupa el puerto, el inicio lanza
GatewayLockError("another gateway instance is already listening on ws://127.0.0.1:<port>"). - Otros fallos de enlace se muestran como
GatewayLockError("failed to bind gateway socket on ws://127.0.0.1:<port>: …").
Notas operativas
- Si el puerto está ocupado por otro proceso, el error es el mismo; libera el puerto o elige otro con
openclaw gateway --port <port>. - Bajo un supervisor de servicios, un nuevo proceso de Gateway que ve un respondedor
/healthzexistente y en buen estado deja ese proceso en control. En systemd, el iniciador duplicado sale con el código 78, por lo que elRestartPreventExitStatus=78predeterminado evita queRestart=alwaysentre en bucle por un conflicto de bloqueo oEADDRINUSE. Si el proceso existente nunca llega a estar en buen estado, los reintentos quedan acotados y el inicio falla con un error de bloqueo claro en lugar de entrar en bucle indefinidamente. - La app de macOS todavía mantiene su propia protección ligera de PID antes de generar el Gateway; el bloqueo en tiempo de ejecución lo aplican el archivo de bloqueo más el enlace HTTP/WebSocket.
Relacionado
- Múltiples Gateways — ejecutar varias instancias con puertos únicos
- Solución de problemas — diagnosticar
EADDRINUSEy conflictos de puertos