web-dev-qa-db-fra.com

que signifie le statut de launchd 78? pourquoi mon agent utilisateur ne fonctionne pas ??

Je souhaite exécuter un service de synchronisation à l'unisson qui s'exécute en arrière-plan chaque fois que je me connecte. Mais le code de statut de mon agent est 78. Je ne sais pas pourquoi, j'ai essayé des correctifs mis en ligne, mais ça ne marche pas.

Quel est le problème?? ci-dessous est le fichier plist pour mon service.

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.Apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Label</key>
    <string>syncmyproject</string>
    <key>StandardOutPath</key>
    <string>/var/log/syncmyproject.log</string>
    <key>StandardErrorPath</key>
    <string>/var/log/syncmyproject.log</string>
    <key>RunAtLoad</key>
    <true/>
    <key>KeepAlive</key>
    <true/>
    <key>Debug</key>
    <true/>
    <key>EnableGlobbing</key>
    <true/>
    <key>ProgramArguments</key>
    <array>
      <string>/usr/local/bin/unison</string>
      <string>-auto</string>
      <string>-batch</string>
      <string>-repeat watch</string>
      <string>~/home/project</string>
      <string>~/project</string>
    </array>
</dict>
</plist>
22
Aaron Shen

J'ai lu man launchctl, trouver 78 signifie function not implemented. Cela n'aide pas beaucoup. 

Enfin, je le fais fonctionner, en fait il y avait des erreurs dans le plist, je recommande d'installer le brew cask install launchcontrol, qui est un outil graphique pour launchctl, il peut aider à détecter les erreurs et à résoudre les problèmes.

34
Aaron Shen

J'ai trouvé que l'erreur concernait les autorisations . J'essayais de rediriger les erreurs et les journaux vers le répertoire /var/log auquel mon utilisateur ne peut pas écrire. r + w l'a corrigé.

Faites également attention lorsque vous chargez vos LaunchAgents. N'utilisez pas Sudo pour charger une pliste si vous vous trouvez dans le répertoire ~/Library/LaunchAgents.

6
Brian McCall

[A couru dans ce problème aussi, donc documenter ce que j'ai trouvé]

"78" est le dernier code de sortie du travail que vous exécutez. De man launchctl:

Sans argument, répertoriez tous les travaux chargés dans launchd sur trois colonnes. La première colonne affiche le PID du travail s'il est exécuté - Ning. La deuxième colonne affiche le dernier statut de sortie du travail. Si le nombre dans cette colonne est négatif, il représente le négatif de le signal qui a arrêté le travail. Ainsi, "-15" indiquerait que le le travail s'est terminé avec SIGTERM. La troisième colonne est le libellé du travail . Si [libellé] est spécifié, imprime des informations sur le travail demandé.

C'est à dire. vous devez lire la documentation (ou le code source) pour le travail que vous commencez. (Dans mon cas, mysqld)

Il est à noter que "78" est mentionné en tant que code de sortie standard sur Linux, indiquant une erreur de configuration. Alors jetez un coup d'œil à la configuration de votre travail (et aux journaux d'erreurs?) Pour voir si vous avez quelque chose de mal configuré.

5
broofa

Voici ce qui m’a attiré: Sous Mac OS X, vous pouvez exécuter des scripts Shell à partir de la ligne de commande même s’il n’ya "que le script" dans le fichier . Cependant, lorsque vous les exécutez à partir de launchd, vous devez indiquer quel binaire doit exécuter le script . On suppose que lorsque vous exécutez à partir de la ligne de commande, il utilise uniquement le shell dans lequel vous vous trouvez actuellement (dans mon cas, bash), mais lorsque vous exécutez launchd, il n'y a pas de "script environnant" . ajoutée 

#!/bin/sh

en tant que première ligne du fichier de script, puis cela a fonctionné.

1
Dan Bergh Johnsson

Semblable à ce qui précède, j'avais un statut 78 car j'avais un lien symbolique dans mon chemin de script Le correctif consistait à utiliser le chemin absolu.

0
Cephos