2026 OpenClaw sessions_spawn et sessions bac à sable : diagnostic sur Mac cloud
La passerelle répond mais les processus enfants ou étapes sandbox échouent—souvent répertoire courant, utilisateur, droits ou politique. Lire aussi premier déploiement, erreurs fréquentes et durcissement.
Sommaire
1. Trois motifs : passerelle UP ne garantit pas spawn OK
Après premier déploiement et erreurs fréquentes, la confusion typique est : processus vivant, mais sessions ou commandes sandbox qui échouent. Les logs sessions_spawn pointent une autre couche que le port 18789. Lire aussi durcissement pour aligner politique et chemins.
- Dérive du cwd : SSH interactif dans
~/projet, launchd peut démarrer depuis/ou un autre home. Les enfants héritent dun cwd vide ou non inscriptible. APFS est souvent insensible à la casse : chemins copiés depuis Linux créent des collisions silencieuses. - UID et propriété : caches ou dépôts appartenant à un autre utilisateur provoquent des refus en sandbox. Démarrage manuel vs launchd change le compte utilisateur réel.
- Politique sandbox : règles egress ou sous-processus trop strictes bloquent une automatisation légitime alors que le dashboard répond encore.
Indicateur : après démarrage à froid uniquement via launchd, mesurer le délai jusquau premier spawn réussi. Si SSH répare tout de suite, environnement hérité ou WorkingDirectory manquant.
2. Matrice : session / passerelle / port
La colonne « Souvent non » évite les fausses pistes : chmod rare pour Unauthorized ; sandbox inutile si le processus meurt avant la couche session.
| Observation | Piste | Vérifier | Souvent non |
|---|---|---|---|
| doctor OK, erreurs spawn sur tâches | Session/sandbox/chemin | repro minimal, vérifier cwd | seul le port 18789 |
| Unauthorized côté client | Auth passerelle | openclaw config get vers gateway.auth | chmod (sauf fichier token illisible) |
| passerelle quitte tout de suite | port/dépendances | lsof -i :18789, RAM, Node | logique sandbox avant écoute |
| certains types de tâches seulement | politique/liste blanche | assouplir temporairement | plugin canal d'abord |
| après mise à niveau | migration de clés | diff structuré openclaw.json | instabilité aléatoire |
3. Cinq étapes plus régression
Même utilisateur Unix quen production. Sinon aucun test spawn nest valide.
- Entrée documentée : noter launchd ou manuel ; avant bascule
openclaw gateway stopetlsof -i :18789. - Repro minimal : plus petit exemple de session dans le
cwdprod. Écart SSH/launchd = variables denvironnement. - Propriété :
ls -lesur chaque chemin signalé ; ACL macOS ; réinitialiser les répertoires détat avec un seul propriétaire. - Journaux : séparer logs passerelle et journal unifié (exemple ci-dessous).
- Diff : après upgrade, comparer blocs sandbox/env.
- Régression : doctor, session minimale, charge réelle, observation 24h.
WorkingDirectory dans la plist launchd ; sans lui le cwd enfant est vide.Sur Mac cloud, figer entrée+cwd+propriétaire dans le même runbook que la CI.
4. Signaux mesurables
① PATH/HOME plus étroits sous launchd. ② APFS et chemins mélangés Linux/macOS. ③ mémoire : pics RSS >2 Go peuvent OOM (code 137) masqués en spawn. ④ deux passerelles sur un même état créent des courses. ⑤ audit : journaliser chaque durcissement sandbox.
5. Vers une base de sessions macOS native
Les conteneurs ajoutent volumes et signaux à déboguer en double. Les portables dorment et déplacent les chemins. Les VPS Linux génériques documentent rarement launchd et propriété fichiers.
Pour UID stable, répertoires détat inscriptibles et disponibilité 7×24, un Mac cloud dédié réduit les couches.
Louer un nœud M4 VPSMAC, fixer utilisateur et WorkingDirectory dans des plists versionnées et traiter la fiabilité spawn comme SLO (p95 après reboot), pas seulement HTTP sur 18789.
6. FAQ
Spawn échoue, passerelle vivante
Commencer par cwd, utilisateur, propriété ; comparer pwd au WorkingDirectory plist ; diff env SSH vs launchd.
Uniquement après upgrade
Clés renommées, sandbox par défaut plus stricte : diff openclaw.json et notes de version OPENCLAW_*.
Plusieurs instances
Pas de répertoire détat partagé ; séparer racines de config, ports ou hôtes.