Points sensibles : la non-surveillance n’est pas un copier-coller du Terminal
Session interactive réussie, tâche de fond vaine. Le Terminal hérite du PATH enrichi par le shell, du socket d’ssh-agent, parfois de Touch ID ; les launchd plists et cron n’héritent d’essentiel que ce que l’on écrit dedans. Le symptôme courant, c’est l’apnée après TCP établi ou pendant l’énumération incrémentale, loin d’un Permission denied immédiat côté Mac à distance.
Enlisements openrsync sur de grands arbres. On voit l’ascension de milliers d’objets, puis un silence intermédiaire entre deux fichiers, sans verdict d’erreur. Tout autre profil qu’un étouffement progressif de WAN ou le fracas d’un disque saturé, qui, lui, génère des fautes d’entrée-sortie explicites. Paliatifs : drapeau de protocole, alignement des binaires rsync, découpage d’arbres gigantesques en flux journalisés séparés.
Le lot sftp -b n’en finit plus. Le mode non interactif refuse toute pantomime de prompt ; écarts de droit ou fautes de chemin relatif gèlent la session, sauf si journaux verbeux et redirection stderr parent du plist.
Publication atomique : ne pas l’oublier. Régler rsync sans refondre la chaîne de livraison laisse des fichiers partiellement visibles. Conjuguez ce guide avec des répertoires de transit et des grilles de contrôle par somme : la réussite, ce sont des octets vérifiés, pas seulement un code de sortie nul.
Couches de symptômes : enveloppe, puis pile de protocole
L0 prouve ssh en BatchMode=yes dans le même contexte d’utilisateur que la tâche. Tout échec ici précède le réglage de rsync. L1 distingue un arrêt sur la construction de liste d’un arrêt au milieu d’un flux d’octets. L2 vise l’interfonctionnement d’openrsync avec l’autre binaire rsync, via --rsync-path et éventuellement --protocol=28.
Avec launchd, validez UserName, WorkingDirectory, StandardOutPath, StandardErrorPath. Entre LaunchDaemons et LaunchAgents, l’accès au trousseau varie. Préférez des clés CI dédiées sans phrase secrète pour les tâches non surveillées, et côté Mac d’accueil des comptes limités à l’upload uniquement.
Les exécuteurs GitHub Actions hébergés en interne imposent un PATH et un HOME spécifiques. Le script enveloppeur affiche dès l’en-tête id et pwd afin d’ancrer l’incident sur des faits et non des anecdotes de couloir.
Quand plusieurs équipes partagent un point d’entrée Mac, combinez ce runbook à des plafonds d’exécution parallèle afin qu’une tempête de réessais d’une équipe n’étrangle pas sshd pendant l’audit de clés d’une autre.
Documenter PATH dans le plist, même étendu, vaut mieux qu’un héritage implicite. Pair ce PATH explicite avec des permissions 750 sur l’enveloppeur afin qu’un seul compte de service l’exécute.
En planification, si openrsync requiert en moyenne trois tentatives pour finir un snapshot, réservez de la marge. Sinon, quand trois pipelines s’alignent sur la même minute, une queue de réessais bénigne devient indisponibilité client sur un Mac de test partagé par les pipelines logiciels, bien au-delà d’un sujet de bande passante seule sur le tableau de bord.
Baselines chiffrées : mesurer les secondes d’inertie
Avant de toucher aux drapeaux, collectez 24h de références : heure de début, heure de fin, nombre de fichiers, octets déplacés, codes de sortie, secondes consécutives sans avancement d’octet. Après 300s environ sans progrès, timeout et alerte. Corrélez le RTT et la perte sur le WAN pour ne pas classer en panne R1 un enlisement openrsync de couche 2.
En CI : définir trois phases explicites de succès — transport achevé, checksum vérifié, bascule atomique de pointeur — chacune avec son propre code de sortie ; ainsi les réessais openrsync ressortent comme taux, pas seulement comme 0/1 bruité.
En comité, répondez par des distributions d’enlisement, pas par une rumeur de vendredi. Les durées d’arrêt après alignement de protocole trahissent queue rarissime ou régression systématique liée à une mineure de Sequoia.
Rejouer la baseline après chaque point d’Apple : les binaires groupés changent d’humeur d’une mouture à l’autre, et un job fiable pendant quinze correctifs successifs reste fragile dès le suivant sur openrsync.
Traduire pour la finance : dix minutes d’enlisement nocturne multipliées par vingt ingénieurs, c’est l’équivalent d’un budget caché d’attention hebdo, souvent supérieur au coût d’épingler GNU rsync stables des deux côtés du tunnel.
Saisonnalité : fin de trimestre de livraison, rafale d’uploads et fêlures d’accès parallèles latentes. Ce que tenait un plan de février sous charge douce peut céder en décembre sans charge synthétique d’entraînement préalable.
Feuille d’escalade d’une page : 1) journaux launchd, 2) sonde ssh -o BatchMode=yes, 3) versions de rsync côté client et distant, 4) piste NAT / pare-feu. Cela évite que des interventions bienveillantes en parallèle se contredisent et prolongent l’indisponibilité de l’entrée Mac pour les builds et la CI sur Sequoia.
Matrice décision : premiers gestes
| Symptôme | Cause probable | Premier geste | Risque / repli |
|---|---|---|---|
| Seules les tâches planifiées se figent | PATH, SSH_AUTH_SOCK manquant, pas de TTY | Exporter PATH ; pré-charger clés ; BatchMode strict | Environnements larges qui se télescopent ; isoler par job |
| Enlisement au milieu de l’arbre | Désalignement binaire openrsync | --protocol=28 ; --rsync-path GNU | Chemin distant erroné = échec net ; stager d’abord |
| SFTP batch muet | Permission ou attente d’entrée | -v ; lots plus petits ; bye explicite | Verbosité fuitant chemins : archivage soigné |
| Instabilité après update OS | Dérive toolchain | Re-épingler rsync ; rejouer baseline | Deux binaires = surcoût d’assistance temporaire |
Mode opératoire : sept étapes
#!/bin/bash
set -euo pipefail
export PATH="/usr/local/bin:/opt/homebrew/bin:/usr/bin:/bin:/usr/sbin:/sbin"
export RSYNC_RSH="ssh -o BatchMode=yes -o ServerAliveInterval=30"
/usr/bin/rsync -av --protocol=28 --rsync-path=/opt/homebrew/bin/rsync \
./artifacts/ "[email protected]:/data/inbox/staging/"
1 : id, pwd, env (filtré) dans le contexte du plist.
2 : ssh -o BatchMode=yes -o ConnectTimeout=10 avant rsync.
3 : aligner les implémentations rsync ; --rsync-path versionné en documentation.
4 : clé CI dédiée, ssh-agent géré — aucune attente interactive de phrase secrète.
5 : timeout, backoff borné, numéro de réessai, audit.
6 : staging, puis bascule de lien symbolique atomique.
7 : résumés mensuels, taux de réessai, latence de queue, politique de rétention des logs compatible avec l’hébergement d’artefacts sensibles (chemins, mandats).
Exercice trimestriel : tuer rsync en plein transfert et vérifier que les grilles marquent l’artefact comme mauvais sans publier de fragments. Incluez le redémarrage du runner en cours de job : cela exerce l’ssh-agent et le nettoyage de fichiers partiels. Placez l’enveloppeur dans le même dépôt git que le pipeline. Si le juridique impose des clés chiffrées partout, investissez dans un déverrouillage non interactif approuvé ; séparez clés humaines et clés machine à la frontière de compte sur le Mac d’accueil.
Rotation des journaux comme pour l’application : un disque plein a souvent été pris à tort pour un « bug openrsync ». Chaque drapeau rsync a un propriétaire et une ligne de raison en dépôt. Flotte Intel et Apple Silicon : deux préfixes Homebrew, deux --rsync-path validés ; un seul chemin figé donne un tableau de bord vert à moitié trompeur. Exercice de rétrogradation : retirer GNU rsync de staging et vérifier qu’une alerte se déclenche si l’on retombe sur openrsync non mitigé. Unifiez le label plist, le préfixe de journal, la série Grafana sur une seule base sémantique.
Lectures
Parallélisme et keepalive : SFTP parallèle. Densification des boucles CI : matrice ControlMaster. Cloisonnement : chroot SFTP et collaboration multi-équipe. Page d’accueil : offre d’entrée Mac pour CI. L’astuce multiplex ne résout pas un enlisement de liste de fichiers openrsync : gardez les post-mortems sur la bonne couche. Plusieurs comptes sur un même hôte se disputent la même file d’E/S : modélisez le SLA avec réessais inclus.
FAQ et hébergement
Tout bannir le rsync du système ?
Pas d’interdiction totale. Les petits jeux de fichiers locaux peuvent rester sur l’outil système. Chargement distant, arbres denses, non surveillé : épingler GNU rsync et documenter les versions.
Et cron en 2026 ?
Apple recommande launchd. Si cron reste, traitez son environnement minimal comme la norme et encodez explicitement PATH et l’enveloppeur, comme sur un plist de service.
Synthèse : sous Sequoia, le sans-surveillance s’appuie sur PATH et ssh-agent explicites, ssh en BatchMode, rsync aligné, timeouts, publication par étapes vérifiées.
Limites : ce guide ne remplace ni la conception réseau (double pile, proxy d’entreprise) ni d’autres programmes L0.
Comparaison : les offres SFTPMAC empaquettent une entrée stable, des frontières de droits et des défauts d’exploitation : moins de nuits à recoller des journaux de plist et des redémarrages d’openrsync à la main, tout en conservant la propriété du pipeline. C’est souvent l’option la moins chère en heures d’astreinte quand l’indisponibilité coûte plus cher que l’entretien d’un nœud maison.
