Comment activer la journalisation launchd sur OS X?

35

Comment activer la journalisation launchd sous 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 launchdjournaux, ils ne sont pas dans /var/log/launchd.log.

sorin
la source

Réponses:

26

J'ai trouvé la solution

 sudo launchctl log level debug 

et après cela

 tail -f /var/log/system.log
sorin
la source
1
J'ai réalisé que ce système d'exploitation a besoin d'administrateur, comme de toute autre chose. Était totalement à la recherche de cela après une journée de cris "WTF où est le drapeau verbeux!" OSX est génial, certes, mais difficile à maîtriser. Thx +1
chiggsy
Suivi, pour votre information: cela fonctionne également avec OS X 10.7.2. Merci.
Alan W. Smith
J'ai eu des problèmes avec mes serveurs Leopard et je pensais qu'il y avait quelque chose qui n'allait pas avec mon pliste de lancement (bien que le même pliste fonctionne dans Snow Leopard). Je suis
tombé par
27
Cela ne fonctionne plus depuis 10h10 Yosemite. Version de lancement: Darwin System Bootstrapper 2.0.0: Mardi 9 septembre à 16h30:56 HAP 2014
JeanMertz
9
@JeanMertz - une alternative?
Umang
20

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 .

peter
la source
17

Sous OS X 10.11 (El Capitan), vous pouvez utiliser sudo launchctl debug <service-target> --stdout --stderrpour 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.plistl’étiquette dev.localmon. Son <service-target>est gui/$UID/dev.localmon, où $UIDest votre nom d'utilisateur, qui, depuis que vous utilisez cela à la CLI, votre shell interpole pour vous.

Donc, en supposant que mon dev.localmonservice se bloque au démarrage (c’était), je pourrais appeler le suivant pour avoir le launchctltuyau 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.plistdeux étapes car la uncachesous-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"

chbrown
la source
sudo launchctl debugsort avec Could not find domain forpour moi
Tom