1 votes

Reproduction de l'environnement d'exécution de l'exécution launchd

J'ai un script qui s'exécute parfaitement sous un shell interactif normal, mais qui a souvent des erreurs lorsqu'il est exécuté en tant qu'utilisateur LaunchAgent.

Y a-t-il un moyen d'exécuter manuellement, et idéalement de manière interactive, une commande exactement comme elle est exécutée par launchd, afin de faciliter le débogage ?


Pour être clair, le script en question fonctionne (de manière intermittente) sous launchd. Ce n'est pas aussi simple que des chemins manquants. Je sais que launchd utilise un environnement plus spartiate, mais la situation est maintenant la suivante :

  • Il y a de fréquentes défaillances intermittentes sous launchd
  • Je n'ai jamais reproduit ces défaillances dans mon shell utilisateur

Comme c'est commun, il y a de nombreuses différences d'environnement entre mon shell utilisateur entièrement configuré et le contexte minimal de launchd, il est donc très difficile de deviner quelle différence pourrait être en cause (ou si c'est même une variable d'environnement qui cause la différence), c'est pourquoi j'espérais trouver un moyen simplement d'exécuter des commandes manuellement et de manière interactive, exactement comme elles s'exécuteraient sous launchd. Je suis surpris qu'il n'y ait pas de sous-commande launchd run ou similaire.

3voto

Ted Wrigley Points 725

Les tâches Launchd s'exécutent avec un shell par défaut qui n'importe aucun des variables d'environnement habituelles que vous verrez dans un shell interactif; en particulier, la variable PATH ne contient aucun répertoire que votre shell interactif aurait pu ajouter, ce qui peut poser des problèmes. Vous pouvez contourner cela de deux manières :

  • En rendant votre script aussi générique que possible : en utilisant des spécifications de chemin complet pour chaque commande et utilitaire, et en définissant explicitement les variables dont vous avez besoin plutôt que de dépendre de l'environnement.
  • En ajoutant un dictionnaire EnvironmentVariables à votre fichier plist launchd et en spécifiant l'environnement là-bas.

La deuxième méthode ressemble à ceci :

    < ... >
    EnvironmentVariables

           NOM_VARIABLE_1
           contenu_variable
           NOM_VARIABLE_2
           contenu_variable

    < ... >

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X