2026 Tâches Mac cloud 24/7 : tableau de migration Linux cron vers macOS launchd et checklist des variables
SSH vers Mac cloud fonctionne, mais les synchros nocturnes via crontab échouent souvent : PATH absent, silence, pas de logs. Article pour équipes qui veulent un VPS exploitable : matrice cron vs launchd, choix LaunchAgent ou LaunchDaemon, plist minimale, launchctl bootstrap, cinq contrôles.
1. Trois ruptures : crontab semble correct mais casse sur Mac cloud
macOS conserve cron, mais le planificateur unifié est launchd. Sur Mac cloud sans écran, on voit souvent : SSH manuel ok, tâche planifiée en échec.
- PATH et environnement : sous Linux on écrit
PATH=dans la crontab. Le cron macOS est minimal ;nodeoupython3manquent. SSH charge.zprofileet.zshrc, pas cron ni launchd par défaut. On croit à tort : manuel ok implique toujours planifié ok. - Identité et trousseau : chemins relatifs, tilde, trousseau diffèrent entre cron et LaunchAgent. Les étapes GUI meurent silencieusement sans moniteur. Avec files et disque CI, nettoyage DerivedData parfois sans stderr.
- Observabilité : sans
StandardOutPath/StandardErrorPath, fragments dans unified logging ; corrélation CI difficile. Sans runbook, boucle de edits crontab.
La matrice suivante fixe le domaine plist pour éviter de déboguer la mauvaise couche.
2. Matrice : cron, LaunchAgent, LaunchDaemon
Contrairement au portable avec login GUI quotidien, le Mac cloud tourne souvent 24/7 sans session graphique. Privilégiez des jobs relus au boot par launchd.
| Cas | Linux | macOS | Pourquoi |
|---|---|---|---|
| Poste dev, sync après login | crontab user | ~/Library/LaunchAgents | Domaine utilisateur atteint la toolchain |
| Cloud 24/7 sans login | cron system | LaunchDaemon ou Agent bootstrap | GUI découplé, auto-start après reboot |
| root / bas port | root crontab | LaunchDaemon + UserName | Utilisateur explicite, audit |
| Haute fréquence seconde | systemd timer | StartInterval + throttling | Fusion dévénements possible |
| Maintenance ponctuelle | at | launchctl submit / RunAtLoad | Moins de lignes cron permanentes |
nvm ou pyenv, ne pas compter sur cron. Mettre interpréteurs absolus dans ProgramArguments, PATH dans EnvironmentVariables. Jamais de secrets en clair dans la plist.
3. Mise en œuvre : plist, launchctl, bootstrap, cinq contrôles
SSH avec droits adéquats. Noms de labels alignés sur le runbook accès zero trust.
- Fixer interpréteurs :
which bash,which nodedocumentés ; Homebrew via/opt/homebrew/binou/usr/local/binpour éviter shell interactif avec brew mais job sans. - plist minimale :
Label,ProgramArguments,StartCalendarInterval(ouStartInterval), stdout/stderr,EnvironmentVariables. Exemple 03:15 (chemins à remplacer) :
- Installer et charger : fichier dans
~/Library/LaunchAgentsou/Library/LaunchDaemons,launchctl bootstrap …. Après edit :bootoutpuisbootstrapoukickstart -k. - Essai et logs :
launchctl kickstart -kp gui/$(id -u)/com.example.vpsmac.nightly-sync; rotation ;WorkingDirectorysi fichiers. - Comparer environnement : temporairement
env | sort(puis supprimer) oulaunchctl printvs SSH interactif. - Coexister avec CI : décaler pics OpenClaw et
xcodebuild;Niceou second nœud pour I/O.
Étapes 1–4 prouvent le fonctionnement, 5–6 observabilité et cohabitation. Tickets : 200 dernières lignes stdout/stderr, launchctl print, empreinte plist.
4. Paramètres et chiffres utiles
① Outils système seuls : PATH=/usr/bin:/bin:/usr/sbin:/sbin souvent suffisant. ② Jobs calendaires suivent fuseau et DST. ③ Sans rotation, logs GB ; syslog externe ou newsyslog. ④ Intervalles courts fusionnables, pas de garantie seconde exacte. ⑤ plist 644, protéger ProgramArguments.
Charge : gros rsync plus xcodebuild -resolvePackageDependencies à la même minute peut saturer SSD vers 200–400 Mo/s et ressembler à un problème réseau. Décaler de 10–15 minutes réduit souvent les stalls.
5. Conclusion : vers un Mac cloud auditable
Exports personnels et crontab jetable créent dérive, secrets éparpillés et conflits sur un hôte. Plists versionnées : standard prod.
Imiter launchd sur VPS Linux générique laisse un vide : pas de launchd natif, trousseau différent, toolchain Xcode désalignée. Les conteneurs simulent des chemins, pas signatures ni simulateurs iOS ; vous opérez une seconde plateforme.
En 2026, VPSMAC Mac cloud M4 avec launchd dans le runbook onboarding et politique plist clonée reste souvent le chemin le plus simple.
6. FAQ
Crontab encore possible ?
Oui mais ce n'est pas le choix par défaut ; PATH, chemins absolus et envoi de logs obligatoires.
LaunchAgent vs LaunchDaemon ?
Agent côté session GUI utilisateur, Daemon côté boot système. Sur hôte sans tête, choisir selon trousseau et propriétaire des fichiers.
Plist modifiée sans effet ?
Vérifier bootout/bootstrap, cohérence Label, droits stderr.