Mise en scène des équipesGriffe Ouvertesur macOS se heurte souvent au même mur frustrant : la passerelle fonctionne correctement à partir d'un onglet de terminal, mais les actualisations programmées, les tentatives de webhook ou un manuelgateway restartlaisser soudainement les agents inactifs. Le correctif consiste rarement à « plus de lignes cron » : il s'aligneAgents de lancement, la journalisation et les limites de processus comme Apple l'attend en 2026.nuage Mac minirend cette répétition bon marché : vous vous connectez en SSH, parcourez les plists et conservez un nœud 24h/24 et 7j/7 sans utiliser un ordinateur portable qui dort tous les jours.20 minutes.
LaunchAgent vs cron pour OpenClaw
macOS est toujours livrécrontab, maislaunchdest le planificateur pris en charge. Les LaunchAgents héritent de vos variables de session GUI lorsqu'ils sont chargés en tant qu'utilisateur connecté, ce qui est important lorsqu'OpenClaw attendHOME, les sockets d'agent SSH ou les clés API sous~/.config. Les tâches Cron s'exécutent avec un environnement minimal ; manquantPATHles entrées provoquent des bogues « fonctionne dans le terminal, échoue à la minute 12 » qui gaspillent45 minutesZoomez les appels.
Pour les tâches récurrentes (audits nocturnes, réchauffement du cache, rotation des jetons), utilisezStartCalendarIntervalouStartIntervalà l'intérieur~/Library/LaunchAgents/. Charger aveclaunchctl bootstrap gui/$(id -u) ~/Library/LaunchAgents/com.example.openclaw.health.plistsur Ventura et plus récent ; anciens hôtes utiliséslaunchctl load, mais de nouveaux documents poussent la sémantique d'amorçage pour plus de clarté.
Si vous avez déjà déployé OpenClaw via npm ou Docker, la couche de planification reste la même : le plist appelle simplement votre script wrapper qui invoque le bon binaire. Comparez les compromis d'installation dansOpenClaw npm contre Dockeravant de geler les chemins à l’intérieur des plists.
Champs Plist qui comptent vraiment
Trois clés séparent les démos fragiles des tâches de production :
- StandardOutPath / StandardErrorPath— Sans eux, les échecs disparaissent. Pointez les deux vers la rotation des fichiers sous
~/Library/Logs/OpenClaw/et coupez aveclog rotateou une semaine50 Moscript de casquette. - Exécuter à la charge— Démarre le travail lorsque vous vous connectez ; jumeler avecGarder en vieseulement si vous souhaitez des réapparitions automatiques. KeepAlive trop enthousiaste peut amplifier les boucles de crash – définissez
ThrottleIntervalà au moins10 secondeslors de l'expérimentation. - Variables d'environnement- Explicitement défini
NODE_ENV,PATH(inclure/opt/homebrew/binsur Apple Silicon), et tout remplacement de répertoire de configuration OpenClaw. L'héritage implicite n'est pas une stratégie.
Les scripts exécutables doivent commencer par un shebang et être chmod+x. launchd ne devinera pas votre shell comme cron le fait parfois avecSHELL=/bin/bash.
Workflow de débogage : lorsqu'une tâche se comporte mal, exécutezlaunchctl kickstart -k gui/$(id -u)/com.example.openclaw.healthpour forcer un redémarrage, puis suivez le fichier StandardError. Comparez les horodatages aveclog show --predicate 'process == \"launchd\"' --last 15mpour voir les raisons de la sortie : code78signale souvent des erreurs de configuration, tandis que des réapparitions rapides suggèrent des dépendances manquantes.
La séparation des privilèges est importante sur les hôtes cloud partagés : ne stockez jamais les jetons d'API de production dans une liste lisible par tous les membres du groupe.staffgroupe si les entrepreneurs partagent la boîte. Préférez les jetons de courte durée injectés par votre gestionnaire de secrets au démarrage, ou exécutez la tâche sensible sous un utilisateur macOS dédié avec son propre dossier LaunchAgents.
Redémarrage de la passerelle et tâches dépendantes
Lorsque les opérateurs exécutent un redémarrage de la passerelle pendant les déploiements, les agents enfants ou les LaunchAgents de vérification de l'état peuvent se fermer si votre wrapper utilise un large éventail d'agents.pkill -f openclawmodèles. Préférez signaler le groupe de processus de passerelle de manière étroite, ou arrêter/démarrer via les propres hooks CLI d'OpenClaw, si disponibles. Documenter unen trois étapesrunbook : vider les webhooks, redémarrer la passerelle, vérifier le dernier code de sortie de LaunchAgent aveclaunchctl print gui/$(id -u)/com.example.openclaw.gateway.
Les régressions cron isolées sont souvent dues à des plannings qui se chevauchent : deux tâches appellent toutes deuxnpm execaux frontières infimes, luttez pour le même port, et le perdant meurt en silence. Décaler par120 secondesou sérialiser via un fichier de verrouillage sous/tmpavecflock.
Après les mises à niveau mineures de macOS, réexécutez toujourslaunchctl printsur les étiquettes critiques; Apple resserre occasionnellement les limites de ressources par défaut et une passerelle qui tolérait256les descripteurs de fichiers ouverts peuvent maintenant avoir besoinulimit -n 1024défini dans le script wrapper avant le démarrage de Node.
Pour les modèles d'exposition (liaison de bouclage, proxy inverse, tunnels), lisezProxy de passerelle OpenClaw et renforcement du tunnelafin que votre planificateur ne redémarre pas sur une surface réseau cassée.
Pourquoi le Cloud Mac bat un ordinateur portable endormi
Les ordinateurs portables s'arrêtent, les VPN s'effondrent et les politiques de batterie interrompent le travail en arrière-plan. Un louéMac mini M4dans un centre de données reste éveillé, conserve une adresse IP de sortie cohérente pour les listes autorisées et vous donne VNC lorsque vous devez cliquer sur les invites de confidentialité macOS qui bloquent les scripts sans tête. Budget17 à 25 $ par jourpour de courtes pointes par rapport aux dépenses en capital pour le matériel, vous restez inactif pendant 70 % du trimestre.
Associez une disponibilité permanente àle guide de configuration Mac à distanceAinsi, les clés SSH, le partage d'écran et les politiques de coffre-fort de fichiers sont définies avant d'automatiser les LaunchAgents. Rien n'est pire qu'un plist qui s'exécute avec le mauvais utilisateur, car le compte cloud n'a jamais effectué les étapes de première connexion de l'interface graphique.
Surveillance : expédier uncinq lignescurl sonde à partir d’un deuxième LaunchAgent tous les5 minutesau point de terminaison de santé de votre passerelle ; alerte si la latence dépasse800 mspour trois contrôles consécutifs. Cela détecte les boucles d'événements Node coincées avant que les clients ne remarquent des retards dans les webhooks.
Les fuseaux horaires mordent les équipes réparties sur trois continents : définirStartCalendarIntervalavec l'heure et la minute explicites dans le tz local du Mac, puis documentez le décalage dans votre runbook. Un travail déclenché à « minuit » alors que la machine pense que c’est encore hier a provoqué des livraisons de webhooks en double lorsqu’il est associé à des clés d’idempotence qui roulent quotidiennement.
Le nœud en bac à sable s'installe sousnvmbesoin de chemins absolus à l'intérieur des plists—/Users/builder/.nvm/versions/node/v22.14.0/bin/node- parce que les tâches de lancement non interactives ne génèrent pas.zshrc. Épinglez la version dans votre README et déplacez les plists dans la même pull request pour éviter une dérive silencieuse après l'exécution d'un coéquipiernvm install 22.
Hygiène des disques : les journaux OpenClaw et les charges utiles de hook conservées peuvent augmenter2 à 4 Gopar mois sur des robots bavards. Ajoutez un LaunchAgent hebdomadaire qui supprime les archives antérieures à14 joursde~/Library/Logs/OpenClaw/archive/après la rotation de gzip, ou l'envoi des journaux par fil à votre pile centrale si la conformité nécessite la conservation.
Matrice de décision rapide
| Besoin | Utiliser | Attention à |
|---|---|---|
| Outils de session utilisateur (porte-clés, jetons GUI) | Agent de lancement | Commande d'articles de connexion ; Déverrouillage de FileVault |
| Liaison de port au niveau racine (<1024) | LaunchDaemon + autorisations minutieuses | Ne pas mélanger aveuglément les LaunchAgents des utilisateurs |
| Scripts horaires ponctuels | cron ouat | PATH et surprises de fuseau horaire |
| Passerelle résistante aux chocs | LaunchAgent + ThrottleInterval | Redémarrer les tempêtes après un mauvais déploiement |
FAQ
OpenClaw doit-il utiliser cron ou LaunchAgent sur macOS ?
Préférez LaunchAgent pour les démons au niveau utilisateur : launchd gère les plantages, l'héritage de l'environnement et la rotation des journaux de manière plus prévisible que cron sur macOS moderne. Réservez cron pour des expériences ponctuelles rapides ou pour des scripts existants déjà présents dans crontab.
Pourquoi le redémarrage de la passerelle arrête-t-il parfois mon agent ?
Le redémarrage de la passerelle peut décharger les tâches LaunchAgent dépendantes si elles partagent un groupe de processus ou si un script wrapper tue les PID enfants. Utilisez des étiquettes plist distinctes, enregistrez chaque étape et évitez les modèles de pkill généraux limités uniquement au nom du processus.
Quelle quantité de RAM un nœud OpenClaw 24h/24 et 7j/7 doit-il prévoir ?
Prévoyez au moins 4 Go de marge au-delà des tas de nœuds pour les pics lorsque plusieurs hooks se déclenchent dans une fenêtre de 30 secondes. Les hôtes Apple Silicon Mac mini de 16 Go sont confortables pour la mise en scène ; les équipes de production isolent souvent les passerelles sur des machines dédiées.
Les agents fiables ont absolument besoin d’hôtes fiables.Apple Silicon Mac miniles locations vous offrent une planification macOS native, une puissance prévisible et un accès SSH/VNC sans acheter un autre ordinateur de bureau. Lorsque les passerelles OpenClaw doivent rester au chaud pendant les tâches nocturnes et les rafales de webhooks, déchargez ce travail sur un nœud cloud, conservez votre ordinateur portable pour écrire du code et augmentez ou réduisez les jours de location en fonction de la cadence de publication.
Gardez OpenClaw éveillé sur le vrai macOS
Louez un Mac mini cloud pour des LaunchAgents 24h/24 et 7j/7, une passerelle intermédiaire et des outils adjacents à Safari. Choisissez une région, puis renforcez SSH avant de charger les plists.