Comment activer la journalisation launchd sur OS X 10.6?
J'ai ajouté un nouveau démon qui ne démarre pas correctement (l'état est 1
).
Je veux déboguer le problème mais je n'ai pas pu trouver les journaux launchd
, ils ne sont pas dans /var/log/launchd.log
.
J'ai trouvé la solution
Sudo launchctl log level debug
et après ça
tail -f /var/log/system.log
En supposant que vous essayez de consigner votre processus plutôt que de lancer 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 vous incombe. comme vous pouvez vous y attendre, si vous utilisez le même fichier dans les deux cas, il enregistrera à la fois l'erreur et la sortie standard au même endroit.
Voir: Débogage de la section Jobs 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 unique, si vous ne souhaitez pas prendre l'option de système de fichiers suggérée par @peter.
Beaucoup de choses sont différentes dans l'implémentation actuelle de launchctl
et de <service-target>
est un peu bizarre. Par exemple, supposons que j'ai un service local que je configure à ~/Library/LaunchAgents/dev.localmon.plist
, qui a le "label" dev.localmon
. Son <service-target>
est gui/$UID/dev.localmon
, où $UID
est votre ID utilisateur qui, puisque vous l'exécutez au niveau de la CLI, votre Shell va interpoler pour vous.
Supposons donc mon dev.localmon
le service se bloquait au démarrage (c'était le cas), je pouvais appeler ce qui suit pour que launchctl
redirige stdout et stderr du processus dans mon shell la prochaine fois (et seulement la prochaine fois) que le service démarre:
Sudo launchctl debug gui/$UID/dev.localmon --stdout --stderr
Étant donné que cela se bloque avec les ATS ouverts et prêts, accédez à 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
Ensuite, de retour dans le premier terminal, vous devriez voir la sortie. (Curieusement, il ne se ferme pas à la fin du processus de service, vous devrez donc Ctrl-C.)
Btw, une fois que vous avez corrigé votre fichier de configuration avec le PATH ou l'environnement qui cassait le service auparavant, vous devez toujours utiliser l'ancien launchctl unload ~/Library/LaunchAgents/dev.localmon.plist && launchctl load ~/Library/LaunchAgents/dev.localmon.plist
en deux étapes depuis la prétendue sous-commande uncache
de la documentation a l'effet suivant:
La commande n'est pas encore implémentée.
Yay pour la stratégie de sortie post-emploi d'Apple: "Allez vite et cassez les choses"