2026 — Sauvegarde planifiée et observabilité OpenClaw Gateway : Cron, openclaw backup et journaux JSONL sur Mac physique distant 7j/7 — runbook reproductible (amplification d'écriture, pièges jobs.json + FAQ)
Les équipes plateforme qui font tourner OpenClaw sur des Mac physiques sans opérateur ont besoin de sauvegardes et de journaux qui survivent aux redémarrages, à la pression disque et aux échecs silencieux de cron — pas d'une archive ponctuelle depuis un portable. Cet article propose un runbook 2026 : planifier openclaw backup avec parité launchd/cron, exploiter du JSONL structuré pour le triage, et éviter la corruption classique de jobs.json ainsi que les pièges d'amplification d'écriture. Vous obtiendrez une matrice décisionnelle, sept étapes de vérification, des seuils réutilisables et une FAQ — en lien avec le durcissement de la surface passerelle sur le même hôte.
1. Pourquoi sauvegardes et journaux échouent sur passerelles Mac 7j/7
Le processus passerelle peut être sain alors que votre histoire de reprise ne l'est pas. Les Mac physiques distants excellent pour les démons à faible jitter, mais la maintenance planifiée hérite des cas limites macOS : environnement réduit sous cron, surprises de comptabilisation d'espace APFS, et double écriture sur les mêmes fichiers d'état JSON.
- Dérive d'environnement : une session SSH interactive voit votre
PATH, les shims nvm/fnm et le trousseau déverrouillé ;cronnon.openclaw backupéchoue alors avec « command not found » ou identifiants manquants pendant que la passerelle continue — fausse confiance. - Pression disque induite par les journaux : du JSONL verbeux avec fsync par événement, ou une rotation qui copie des fichiers multi-gigaoctets, transforme l'I/O de régime en latence de queue pour la passerelle. Les symptômes ressemblent à des canaux instables, pas à un disque plein avant que les instantanés APFS et Time Machine ne rivalisent sur le même volume.
- Courses sur l'état : l'automatisation qui édite
jobs.jsonpendant que la passerelle persiste des points de contrôle peut produire du JSON tronqué, des plannings vides ou des tâches qui « reviennent » après redémarrage. Couplez la discipline de sauvegarde au durcissement hôte décrit dans 2026 — Surface d'attaque production OpenClaw : 127.0.0.1, reverse proxy et tunnel sur Mac physique distant (défauts malsains + FAQ) afin que les restaurations aboutissent sur une surface connue.
2. Matrice planificateur et rétention
Utilisez cette matrice pour choisir entre cron et launchd, et pour dimensionner la rétention JSONL par rapport à la fréquence de sauvegarde. Tout élément de la colonne fragile doit avoir un responsable et une note de retour arrière dans votre ticket de changement.
| Dimension | Schéma fragile | Cible production |
|---|---|---|
| Planificateur | Entrée cron nue appelant openclaw sans chemin absolu |
Plist launchd avec EnvironmentVariables et script enveloppe journalisant les codes de sortie |
| Cible de sauvegarde | Seul l'arbre workspace ; config passerelle et état des tâches absents | Manifeste unique listant config, état, références d'identifiants (pas les secrets) et définitions de canaux |
| Récepteur JSONL | Un fichier qui grossit indéfiniment avec rotation quotidienne par cp |
Rotation temps/taille par renommage + tâche compress ; un seul processus rédacteur |
| Copie hors machine | Upload en flux pendant que l'archive de sauvegarde s'écrit encore | Déplacement atomique vers done/, puis rclone/rsync avec limite de débit |
| Observabilité | Notifications d'échec uniquement par e-mail vers une boîte partagée | Alertes structurées sur sortie non nulle de sauvegarde, erreurs d'analyse jobs.json et tendance d'espace libre |
| Stabilité longue durée | Traiter la sauvegarde comme indépendante de la disponibilité passerelle | Même check-list SRE que la santé passerelle — alignez aussi la topologie documentée avec le Guide de déploiement global OpenClaw v2026.3 : Mac mini multirégion, iMessage natif et SecretRef |
3. Runbook reproductible en sept étapes
Exécutez avec le même compte de service que la passerelle. Conservez une transcription shell — les incidents de restauration se déboguent par différences de chemins et permissions, pas par mémoire.
- Geler l'inventaire : notez les chemins absolus de
openclaw.json, racine workspace,jobs.json, références de jetons (sans valeurs) et répertoires JSONL. Collez le bloc dans le wiki et l'en-tête du script enveloppe. - Prouver la sauvegarde interactive : en SSH, exécutez
openclaw backup --output /var/tmp/openclaw-probe-$(date +%s).tar.zst(ou vos drapeaux documentés), puis vérifiez taille, liste de fichiers et somme de contrôle. Ne sautez pas cette étape sous prétexte que « ça marchait le mois dernier ». - Durcir l'enveloppe : créez
/usr/local/sbin/openclaw-backup.shavecset -euo pipefail,PATH=explicite, journalisation JSONL ou syslog, etloggeren cas d'échec. Code de sortie non nul si une sous-commande échoue. - Planifier avec launchd : préférez
StartCalendarIntervalouStartIntervaldans un plist/Library/LaunchDaemons; chargez aveclaunchctl bootstrap. Si cron est obligatoire, n'appelez que l'enveloppe — jamais un one-liner inline. - Brancher l'observabilité JSONL : configurez la passerelle pour ajouter un objet JSON par ligne avec champs
ts,level,channel,job_idettrace_id. Expédiez les fichiers tournés vers votre plateforme de logs ou stockage objet avec verrouillage d'objet si la conformité l'exige. - Réplication hors machine : après dépôt de l'archive dans
done/, synchronisez avec plafonds de débit pour ne pas affamer l'I/O passerelle. Gardez au moins trois générations locales jusqu'à vérification des copies distantes. - Exercice trimestriel de restauration : sur un Mac de test, extrayez la dernière archive distante, validez
jobs.jsonavecjq empty, et différenciez la config critique par rapport à la production. Ouvrez des tickets pour toute étape manuelle inventée pendant l'exercice.
4. Amplification d'écriture et pièges jobs.json
L'amplification d'écriture sur JSONL vient souvent d'une durabilité bien intentionnée : fsync après chaque ligne, gzip de petits blocs, ou expéditeurs qui relisent et ré-uploadent des fichiers entiers. Chaque événement logique coûte alors plusieurs écritures de bloc complètes. Corrigez par vidages groupés (latence bornée, p.ex. 1–2 s), rotation par renommage plutôt que copie-suppression, et un seul agent par fichier suivi.
jobs.json est une surface de coordination. Modes d'échec typiques : tâche Ansible écrivant du JSON indenté pendant que la passerelle écrit du compact — dernier rédacteur gagne et le bruit de diff masque les vrais changements ; écritures partielles sous SIGKILL ; BOM UTF-8 ajouté par certains éditeurs ; virgules finales après édition manuelle. Atténuation : jq -e . jobs.json en CI ; remplacement atomique mktemp && mv ; verrou fichier ou fenêtre de maintenance exclusive ; contrôle de version des éditions humaines avec revue obligatoire.
5. Seuils réutilisables
- SLO sauvegarde : sauvegarde complète réussie au moins quotidiennement pour passerelles avec état ; incrémentale ou workspace seul toutes les six heures si le churn est élevé. Pagez si deux exécutions planifiées consécutives échouent ou finissent >50 % plus petites que la médiane sur sept jours sans changement de config expliqué.
- Marge disque : alerte à 85 % d'utilisation du volume ; bloquez les nouveaux jobs d'instantané à 90 %. Maintenez ≥20 % d'espace libre sur le conteneur APFS hébergeant JSONL et le staging de sauvegarde.
- Budget croissance JSONL : si le débit d'écriture soutenu dépasse ~5 Mo/min par passerelle sans hausse de trafic, cherchez des journaliseurs dupliqués ou des drapeaux debug laissés après incident.
- Fraîcheur jobs.json : après édition intentionnelle, le rechargement passerelle doit refléter le nouveau mtime dans les soixante secondes ; sinon vous modifiez un autre chemin que celui lu par le processus en cours.
6. FAQ
Pourquoi openclaw backup réussit en SSH interactif mais échoue sous cron ?
cron fournit un environnement minimal. Node, openclaw et les aides d'identifiants sont souvent sur un PATH que seul votre shell de connexion définit. Utilisez launchd avec EnvironmentVariables et chemins absolus, ou une enveloppe qui charge le même profil que vos tests — n'assumez jamais que cron hérite de la session SSH.
Qu'est-ce qui provoque l'amplification d'écriture sur les journaux JSONL de passerelle ?
Fsync par ligne, compression de minuscules tampons, rotation par copie de fichier entier, et plusieurs processus qui ajoutent au même récepteur multiplient les octets écrits. Regroupez les rédacteurs, tournez par renommage, et groupez les fsync dans un budget de latence borné.
Pourquoi les tâches planifiées disparaissent après édition de jobs.json ?
Les écrivains concurrents et le JSON invalide par sauvegarde partielle corrompent le fichier analysé par la passerelle. Utilisez des écritures atomiques, validez avec jq avant rechargement, et évitez l'édition simultanée humaine et automatique.
Quelle marge disque pour un Mac OpenClaw 7j/7 ?
Visez au moins 20 % d'espace libre sur le volume de données ; pagez sur une projection linéaire à sept jours vers 85 % plein. Le staging des sauvegardes complètes avant upload peut faire picoter l'utilisation — dimensionnez les répertoires de staging séparément de l'état passerelle.
7. Pourquoi le Mac mini convient à cette pile ops
Les enveloppes de sauvegarde et les pipelines JSONL sont une infrastructure ennuyeuse — et l'ennui veut un hôte POSIX au comportement électrique prévisible. macOS offre launchd, les outils APFS unifiés et la bande passante mémoire Apple Silicon sans surprises réseau de VM imbriquées : le même script qu'en SSH correspond à ce qui s'exécute à 03:15 localement.
Un Mac mini sur puce M série consomme quelques watts au ralenti tout en hébergeant passerelles toujours actives, expéditeurs de journaux et staging de sauvegarde chiffré. Gatekeeper, SIP et FileVault s'alignent avec une posture où la passerelle écoute en localhost et n'expose que derrière des fronts TLS — le schéma des opérateurs OpenClaw sur la durée.
Si vous voulez de l'observabilité JSONL et des openclaw backup planifiés sur du matériel que vous maîtrisez — pas une VM partagée bruyante — le Mac mini M4 reste l'un des nœuds sans présence les plus équilibrés pour cette pile. Découvrez les nœuds ZoneMac pour exécuter le même runbook sur du Apple Silicon dédié.
Mac mini dédié pour OpenClaw 7j/7
Nœuds macOS physiques pour sauvegardes passerelle, pipelines JSONL et maintenance planifiée launchd — mêmes chemins et permissions que ce runbook documente.