2026 OpenClaw démon et démarrage auto : launchd sur Mac distant avec VNC
25 mars 2026 · ~12 min
Pour survivre aux reconnexions et redémarrages, macOS attend un LaunchAgent : arguments, fichiers de log, politique de relance. Sur un Mac distant en VNC, validez d’abord les invites graphiques, puis chargez le job avec launchctl bootstrap gui/$(id -u). Vérifiez le XML avec plutil -lint. Ne mettez pas de secrets en clair dans le plist.
Sur serveurs loués, ajoutez la dimension « colocataires » : comptes partagés, fenêtres de maintenance, IP variables. Versionnez le plist (hors secrets) dans Git et tenez un mini runbook : en pleine nuit, un port fermé est souvent une autorisation en attente, pas un mystère réseau.
Sans démon, qu’est-ce qui casse ?
- Fin de session SSH ⇒ fin du process, sauf tmux sans politique de relance.
- Veille et économie d’énergie peuvent couper l’écoute sans message explicite.
- Keychain / confidentialité attendent un clic silencieux si personne n’est en GUI.
- Sans stderr fichier, le post-mortem dépend du scrollback.
- Jobs dupliqués ⇒ conflits de ports et comportement aléatoire.
Comparatif rapide
| Méthode | Cas | Auto | Relance crash | Audit |
|---|---|---|---|---|
| Terminal avant-plan | Debug | Non | Non | Faible |
| tmux | Session longue | Scripts | Manuel | Moyen |
| cron | Périodique | Plan | Pas pour gateway permanent | Moyen |
| LaunchAgent | Service utilisateur | Oui | KeepAlive optionnel | Élevé |
Six étapes
which openclaw + sous-commande validée.~/Library/LaunchAgents/com.example.openclaw.plist.<?xml version="1.0" encoding="UTF-8"?> <plist version="1.0"><dict> <key>Label</key><string>com.example.openclaw</string> <key>ProgramArguments</key><array> <string>/opt/homebrew/bin/openclaw</string><string>gateway</string> </array> <key>RunAtLoad</key><true/> <key>StandardOutPath</key><string>/tmp/openclaw.out.log</string> <key>StandardErrorPath</key><string>/tmp/openclaw.err.log</string> </dict></plist>
WorkingDirectory, variables d’environnement, pas de jetons en clair
Définissez WorkingDirectory si OpenClaw résout des chemins relatifs. Utilisez EnvironmentVariables pour PATH ou shims Node, jamais pour coller des API keys lisibles par d’autres comptes. Sur Mac distants multi-locataires, chmod du plist et revue des ProgramArguments sont obligatoires.
KeepAlive et tempêtes de redémarrage
Une config invalide + KeepAlive = boucle de respawn qui noie les logs. Stabilisez d’abord sans KeepAlive, lisez stderr, puis ajoutez une limitation documentée par Apple. Limitez la taille des fichiers de log pour éviter de remplir le volume le week-end.
Triage VNC quand launchctl semble OK
Accessibilité, disque complet, invite réseau masquée : autant de cas où le job est chargé mais le service inutilisable. La session graphique reste le raccourci sur une machine que vous ne toucherez jamais physiquement.
Playbook de retour arrière
- Archiver plist + 200 dernières lignes stderr.
launchctl bootout gui/$(id -u) ~/Library/LaunchAgents/com.example.openclaw.plist(adapter le domaine).- Relancer manuellement sous VNC jusqu’à stabilité, comparer argv.
- Re-bootstrap après
plutil -lintet revue pair.
Checklist le jour de mise à jour
Les chemins binaires ou dossiers par défaut peuvent bouger. Procédure : exécution interactive unique sous VNC pour fermer les assistants, noter les argv qui marchent, mettre à jour le plist, recycler le job, comparer le volume de stderr minute par minute avant/après. Sur Mac loués partagés, désignez un propriétaire du plist pour éviter les écrasements.
Surveillance minimale sans APM coûteux
Souvent suffisant : code retour de launchctl print, horodatage du fichier stderr, sonde HTTP sur la console. Surveillez aussi l’espace disque—une boucle KeepAlive avec logs non tournés peut saturer le volume en une nuit.
Conflits de ports et double démarrage
Le même label chargé deux fois, ou un processus manuel concurrent avec launchd sur le même port, produit souvent des erreurs bind intermittentes sans indiquer clairement le coupable. Fixez une règle d’équipe : toujours launchd en production, ou debug = bootout d’abord avant tout lancement interactif. Un tableau partagé Port → processus attendu évite des heures perdues lors des passations et des « correctifs » contradictoires en astreinte.
Sécurité minimale pour les passerelles
Écouter sur toutes les interfaces ou n’exposer le service que via tunnel SSH dépend du modèle de menace. Un Mac loué n’est pas une zone de confiance pour mots de passe réutilisés ou secrets VNC faibles. Gardez les jetons hors du plist lisible par d’autres comptes et placez ces deux phrases en tête du runbook—cela réduit les erreurs coûteuses quand quelqu’un reprend l’incident à 3 h du matin.
Articles liés
dépannage, migration 2026.3.x, guide VNC.
Conclusion
VNCMac : Mac distant avec VNC pour cliquer les prompts, launchd pour la stabilité — bon compromis sans acheter une machine fixe.