Gateway
Blocco del Gateway
Perché
- Assicurare che venga eseguita una sola istanza del Gateway per porta di base sullo stesso host; i Gateway aggiuntivi devono usare profili isolati e porte univoche.
- Sopravvivere a crash/SIGKILL senza lasciare file di blocco obsoleti.
- Fallire rapidamente con un errore chiaro quando la porta di controllo è già occupata.
Meccanismo
- Il Gateway acquisisce prima un file di blocco per configurazione nella directory dei blocchi di stato e verifica la porta configurata alla ricerca di un listener esistente.
- Se il proprietario del blocco registrato non esiste più, la porta è libera o il blocco è obsoleto, l’avvio recupera il blocco e continua.
- Il Gateway associa quindi il listener HTTP/WebSocket (predefinito
ws://127.0.0.1:18789) usando un listener TCP esclusivo. - Se il binding fallisce con
EADDRINUSE, l’avvio generaGatewayLockError("another gateway instance is already listening on ws://127.0.0.1:<port>"). - All’arresto, il Gateway chiude il server HTTP/WebSocket e rimuove il file di blocco.
Superficie di errore
- Se un altro processo mantiene la porta, l’avvio genera
GatewayLockError("another gateway instance is already listening on ws://127.0.0.1:<port>"). - Gli altri errori di binding emergono come
GatewayLockError("failed to bind gateway socket on ws://127.0.0.1:<port>: …").
Note operative
- Se la porta è occupata da un altro processo, l’errore è lo stesso; libera la porta o scegline un’altra con
openclaw gateway --port <port>. - Sotto un supervisore di servizio, un nuovo processo Gateway che vede un risponditore
/healthzintegro esistente lascia il controllo a quel processo. Su systemd, lo starter duplicato esce con codice 78, così il valore predefinitoRestartPreventExitStatus=78impedisce aRestart=alwaysdi entrare in loop su un conflitto di blocco oEADDRINUSE. Se il processo esistente non diventa mai integro, i tentativi sono limitati e l’avvio fallisce con un errore di blocco chiaro invece di ciclare all’infinito. - L’app macOS mantiene ancora la propria guardia PID leggera prima di avviare il Gateway; il blocco runtime è imposto dal file di blocco più il binding HTTP/WebSocket.
Correlati
- Gateway multipli — esecuzione di più istanze con porte univoche
- Risoluzione dei problemi — diagnosi di
EADDRINUSEe dei conflitti di porta