Dépannage
Journaux, récupération de configuration, forçage de langue et résolution des problèmes courants.
Journaux
Runyard écrit un journal distinct pour chaque processus, action et commande d'installation sous ~/Library/Logs/Runyard/. Vous pouvez ouvrir directement ce dossier :
~/Library/Logs/Runyard/
| Fichier | Contenu |
|---|---|
{NomOutil}-{Label}.log |
stdout + stderr de la commande de démarrage. |
{NomOutil}-stop-{Label}.log |
Sortie d'une stopCommand personnalisée. |
{NomOutil}-action-{Label}.log |
Sortie d'une action (commande shell ou AppleScript). Les espaces et les / dans l'étiquette deviennent des -, donc « Clear Cache » écrit MyApp-action-Clear-Cache.log. |
{NomOutil}-install.log |
Sortie de installCommand. |
{NomVerification}.log |
Historique des sondages par vérification d'état (horodatages, résultats, codes de réponse / erreurs). |
Le bouton View Logs sur chaque carte d'outil (ou sur chaque rangée imbriquée dans un groupe) ouvre tous les fichiers journaux de l'outil dans Console.app en une seule fois.
Rotation et rétention
Les journaux font l'objet d'une rotation automatique. Chaque flux vit dans {Nom}.log, et le contenu plus ancien est archivé sous {Nom}.log.1 (plus récent), puis {Nom}.log.2.gz, {Nom}.log.3.gz, etc. La première archive reste non compressée pour permettre grep ou tail sans extraction ; les plus anciennes sont en gzip.
Valeurs par défaut : 5 Mo par fichier, 3 rotations conservées, plafond d'âge de 30 jours. Ajustables dans Préférences → Avancé → Journaux, ou en modifiant advanced.logMaxFileSizeMB / logKeepRotations / logMaxAgeDays dans config.json. Les archives qui dépassent les seuils de taille ou d'âge sont nettoyées au prochain démarrage de l'application.
Pour parcourir les archives d'un outil en particulier, faites un clic droit sur sa carte dans la fenêtre de la barre des menus et choisissez Révéler les journaux dans le Finder. Les fichiers en cours de l'outil sont mis en évidence dans la fenêtre Finder, et les archives apparaissent à côté.
Un outil refuse de démarrer : où regarder ?
- Ouvrez le popover et cliquez sur View Logs sur la carte de l'outil. Faites défiler jusqu'en bas de chaque fenêtre Console.app ; la plupart des échecs affichent une trace ou un message d'erreur à la fin.
- Si l'outil a échoué pendant l'installation, ouvrez
{NomOutil}-install.log. - Si le processus démarre mais n'atteint jamais l'état « running », la vérification d'état échoue probablement. Consultez le journal pour connaître l'URL interrogée, puis essayez cette URL dans un navigateur ou avec
curlpour voir ce qu'elle retourne.
Causes courantes
- Commande introuvable. Runyard exécute les commandes dans un environnement nettoyé qui ne charge pas les fichiers d'init de votre shell. Voir Environnement shell et PATH ci-dessous pour l'explication complète et les correctifs.
- La vérification de démarrage expire. La valeur par défaut est 30 s. Augmentez
advanced.startupTimeoutglobalement, ou définissez unstartupRequestTimeoutspécifique sur la commande de démarrage pour les points d'accès lents. - Port non détecté. Certains processus forkent de manière que
lsofne peut pas tracer. DéfinissezstartupFallbackPortsur la commande de démarrage comme indice. - Boucles d'installation. Si
installCommands'exécute à chaque fois, c'est quemarkerPath(par défautnode_modules) ne correspond pas à ce que votre installateur crée. Définissez explicitementmarkerPathsur un fichier ou dossier dont l'existence post-installation est garantie.
Environnement shell et PATH
La plupart des problèmes du type « ça fonctionne dans mon terminal mais pas dans Runyard » remontent à une seule cause : Runyard n'hérite pas de l'environnement de votre shell. Quand vous démarrez un service ou lancez une action, Runyard lance le processus avec un environnement minimal et nettoyé, construit à partir de votre configuration.
Ce que Runyard définit
- Le
PATHest construit à partir du tableaupathsde votre configuration (global plus niveau outil, par ordre de priorité). Rien d'autre n'est hérité. - Une poignée de variables sûres :
HOME,USER,LANG,SHELL,TMPDIR,SSH_AUTH_SOCK. - Rien d'autre. Vos
.zshrc,.zprofile,.bash_profile,.bashrcne sont pas chargés. Les variables exportées parnvm,fnm,direnv,mise,asdf,Homebrew shellenv,1Password CLI, etc. sont absentes.
C'est intentionnel : Runyard devient prévisible d'un Mac à l'autre, et les bogues du type « ça marche chez moi » sont évités.
Symptômes
command not found: node(ounpm,aws,docker,mise, etc.)- La commande s'exécute, mais avec la mauvaise version (par exemple Node 16 du système au lieu de Node 22 du projet).
- La commande s'exécute, mais sans certaines variables d'environnement (pas de
DATABASE_URL, pas de profil AWS, etc.). - Les actions AppleScript qui lancent des sous-processus shell échouent de la même manière.
Correctif 1 : étendre paths
Ajoutez les répertoires qui contiennent les binaires manquants. C'est le correctif le plus direct, et il fonctionne pour n'importe quel service.
{
"paths": [
"/opt/homebrew/bin",
"~/.nvm/versions/node/v22.0.0/bin",
"/Applications/Docker.app/Contents/Resources/bin"
]
}
Vous pouvez aussi définir paths par outil. Par défaut, les chemins au niveau outil fusionnent avec ceux du niveau global ; mettez pathsOverride: true sur l'outil pour remplacer entièrement la liste globale.
À utiliser quand : les outils dont vous avez besoin sont stables, vous ne dépendez pas de la magie des fichiers d'init du shell, et vous voulez un démarrage le plus rapide possible.
Correctif 2 : encapsuler la commande dans un shell de connexion
Exécutez votre commande dans /bin/zsh -lc '…' (ou /bin/bash -lc). Le -l en fait un shell de connexion, qui charge vos fichiers d'init. nvm, fnm, direnv, Homebrew et le reste s'initialisent comme si vous aviez ouvert un terminal.
"startCommands": [{
"label": "Dev",
"command": "/bin/zsh",
"args": ["-lc", "npm run dev"]
}]
À utiliser quand : vous dépendez de versions d'outils gérées par le shell (nvm + .nvmrc), de chargeurs d'env (direnv, mise), ou de tout ce qui s'accroche à .zshrc. C'est plus lent de quelques centaines de millisecondes par démarrage, mais cela reproduit exactement le comportement de votre terminal.
Lequel utiliser
| Situation | Correctif recommandé |
|---|---|
Besoin de /opt/homebrew/bin disponible |
Correctif 1 (paths) |
| Version Node fixe qui change rarement | Correctif 1 (paths) |
Bascule auto de Node via .nvmrc / .node-version |
Correctif 2 (shell de connexion) |
Projet qui utilise direnv ou mise |
Encapsulez avec direnv exec / mise exec (voir Exemples de configuration) |
Projet qui utilise asdf |
Correctif 2 (shell de connexion) |
Test rapide
Pour vérifier l'environnement vu par votre commande, déclenchez cette action une fois :
{
"label": "Print env",
"type": "command",
"command": "/usr/bin/env"
}
Lancez-la depuis le popover, puis ouvrez le fichier journal de l'action dans ~/Library/Logs/Runyard/. Comparez le PATH et les variables affichées avec ce qu'env retourne dans un terminal vierge. La différence, c'est votre liste de pièces manquantes.
Synchroniser entre plusieurs Mac
Vous pouvez déplacer config.json vers iCloud Drive, Dropbox ou tout autre dossier synchronisé afin que tous vos Mac partagent la même configuration. L'interface complète est documentée dans Fenêtre Réglages → Fichiers.
- Ouvrez Runyard → Settings → General.
- Sous Files, cliquez sur Change Location….
- Choisissez un dossier synchronisé. Runyard y copie
config.jsonet recharge depuis ce nouveau chemin. - Sur chacun de vos autres Mac, répétez l'opération et choisissez le même dossier.
Le chemin retenu est stocké localement par Mac dans les UserDefaults ; chaque machine doit donc être réglée une fois. Seul le fichier de configuration lui-même est synchronisé par votre service de synchronisation.
Repli lorsque l'emplacement synchronisé est indisponible
Si le dossier choisi est introuvable au lancement de Runyard (service de synchronisation hors ligne, volume démonté, etc.), Runyard :
- Se replie sur l'emplacement par défaut (
~/Library/Application Support/Runyard/config.json). - Affiche une notification vous informant du repli.
Une fois le dossier synchronisé de nouveau disponible, Runyard s'y reconnecte au prochain relancement.
Réinitialiser par défaut
Réglages → General → Reset to Default recopie config.json vers l'emplacement par défaut. La copie synchronisée n'est pas supprimée, vous pouvez donc revenir en arrière par la suite.
Récupérer une configuration cassée
Si config.json contient une erreur de syntaxe, Runyard affiche une alerte au lancement (et au rechargement) pointant vers le chemin du champ fautif (par exemple, tools[Mon App].startCommands[0].command). Vous pouvez :
- Corriger sur place. Ouvrez Réglages → General → Open in Editor, ou utilisez Reload Configuration après modification pour vérifier.
- Restaurer la configuration d'exemple. Supprimez
~/Library/Application Support/Runyard/config.json. Au lancement suivant, Runyard écrit un nouvel exemple basé sur le modèle intégré. - Garder une copie de sauvegarde. Si votre configuration réside dans un dossier synchronisé avec historique (iCloud Drive, Dropbox), revenez à la dernière révision fonctionnelle.
Importer un outil partagé
Les outils importés sont volontairement réglés pour ne pas démarrer automatiquement ; un outil fraîchement importé reste inactif jusqu'à ce que vous le démarriez depuis le popover. Si une action AppleScript ne fait rien, son fichier de script n'a peut-être pas été inclus (la fenêtre d'importation le signale en ambre). Pour les messages d'incompatibilité de version et « Ce n'est pas un fichier Runyard », ainsi que le flux complet, voir Exporter et importer des outils.
Forçage de langue
Runyard suit la langue système de macOS (Réglages Système → Général → Langue et région). Pour tester une langue précise sans modifier les réglages système, lancez depuis le Terminal.
Anglais :
open /Applications/Runyard.app --args -AppleLanguages "(en)"
Français :
open /Applications/Runyard.app --args -AppleLanguages "(fr)"
Cela n'affecte que le lancement en cours. Quittez Runyard puis rouvrez-le normalement pour revenir à l'état précédent.
Toujours bloqué ?
- Consultez le Guide de la barre de menus pour comprendre le comportement attendu de chaque fonctionnalité.
- Relisez la Référence config.json ; la plupart des comportements « étranges » s'expliquent par une valeur par défaut (par exemple
showWhen: "running"qui masque une action que vous venez d'ajouter). - Si vous pensez qu'il s'agit d'un bogue, contactez-nous avec votre
config.jsonanonymisé et l'extrait de journal pertinent :- Utilisez Send Feedback dans Réglages → Onglet About ; l'e-mail est pré-rempli avec vos informations de version et joint (en option) automatiquement votre
config.json. - Ou écrivez directement à support@bonevil.ca.
- Utilisez Send Feedback dans Réglages → Onglet About ; l'e-mail est pré-rempli avec vos informations de version et joint (en option) automatiquement votre