Réponses:
J'ai trouvé la solution
sudo launchctl log level debug
et après cela
tail -f /var/log/system.log
En supposant que vous essayez de consigner votre processus plutôt que launchd lui-même, si vous incluez les lignes suivantes dans le fichier plist launchd:
<key>StandardOutPath</key>
<string>/path/to/logfile.log</string>
<key>StandardErrorPath</key>
<string>/path/to/another_logfile.log</string>
et rechargez le processus, toute journalisation ou impression interne à votre script sera capturée dans l’un de ces deux fichiers à chaque exécution. Bien que la rotation des fichiers semble être à vous. comme vous pouvez vous y attendre, si vous utilisez le même fichier dans les deux cas, l'erreur sera enregistrée et la sortie standard au même endroit.
Voir: Section Débogage des tâches launchd dans Création de démons de lancement et d'agents .
Sous OS X 10.11 (El Capitan), vous pouvez utiliser sudo launchctl debug <service-target> --stdout --stderr
pour activer la journalisation ponctuelle, si vous ne souhaitez pas utiliser l'option de système de fichiers suggérée par @peter.
Beaucoup de choses sont différentes dans la mise en œuvre actuelle de launchctl
, et <service-target>
c'est un peu bizarre. Par exemple, supposons que j’ai configuré un service local portant ~/Library/LaunchAgents/dev.localmon.plist
l’étiquette dev.localmon
. Son <service-target>
est gui/$UID/dev.localmon
, où $UID
est votre nom d'utilisateur, qui, depuis que vous utilisez cela à la CLI, votre shell interpole pour vous.
Donc, en supposant que mon dev.localmon
service se bloque au démarrage (c’était), je pourrais appeler le suivant pour avoir le launchctl
tuyau stdout et stderr du processus dans mon shell la prochaine fois (et seulement la prochaine fois que le service démarrera):
sudo launchctl debug gui/$UID/dev.localmon --stdout --stderr
Puisque cela se bloque avec les TTY ouverts et prêts, allez sur un autre terminal et exécutez:
launchctl start dev.localmon
# start is a legacy command and doesn't use the fancy new service-target notation
De retour dans le premier terminal, vous devriez voir la sortie. (Bizarrement, il ne ferme pas lorsque le processus de service est mort, vous devrez donc appuyer sur Ctrl-C.)
Par ailleurs, une fois que vous avez corrigé votre fichier de configuration avec le chemin ou l'environnement PATH précédent, vous devez toujours utiliser l'ancien en launchctl unload ~/Library/LaunchAgents/dev.localmon.plist && launchctl load ~/Library/LaunchAgents/dev.localmon.plist
deux étapes car la uncache
sous-commande de la documentation a les effets suivants:
La commande n'est pas encore implémentée.
Yay pour la stratégie de publication post-emploi d'Apple: "Bougez vite et cassez les choses"
sudo launchctl debug
sort avec Could not find domain for
pour moi