¿Cómo activo el registro de launchd en OS X?

35

¿Cómo activo el registro de launchd en OS X 10.6?

Agregué un nuevo demonio que no se inicia correctamente (el estado es 1).

Quiero depurar el problema pero no pude encontrar launchdregistros, no están en /var/log/launchd.log.

Sorin
fuente

Respuestas:

26

Encontre la solucion

 sudo launchctl log level debug 

y despues de esto

 tail -f /var/log/system.log
Sorin
fuente
1
Me he dado cuenta de que este sistema operativo necesita administrador, como cualquier otra cosa. Estaba totalmente buscando esto después de un día de gritar "¡WTF dónde está la bandera detallada!" OSX es genial, claro, pero difícil de manejar. Thx +1
chiggsy
Seguimiento, FYI: Esto también funciona con OS X 10.7.2. Gracias.
Alan W. Smith
He estado teniendo problemas con mis servidores Leopard y pensé que había algo mal con mi launchd plist (aunque el mismo plist funciona en Snow Leopard). Me pasó a sales a este y funciona como encanto :)
icasimpan
27
Esto ya no funciona desde 10.10 Yosemite. versión de launchctl: Darwin System Bootstrapper 2.0.0: martes 9 de septiembre 16:30:56 PDT 2014
JeanMertz
99
@JeanMertz: ¿alguna alternativa?
Umang
20

Suponiendo que está intentando registrar su proceso en lugar de lanzarlo, si incluye las siguientes líneas en el archivo plist de launchd:

<key>StandardOutPath</key>
<string>/path/to/logfile.log</string>
<key>StandardErrorPath</key>
<string>/path/to/another_logfile.log</string>

y vuelva a cargar el proceso, cualquier registro o impresión que tenga interno en su script se capturará en uno de esos dos archivos cada vez que se ejecute. aunque la rotación de los archivos parece depender de usted. como es de esperar, si usa el mismo archivo en ambas instancias, registrará tanto el error como la salida estándar en el mismo lugar.

Consulte: Depuración de la sección Trabajos de launchd en Creación de demonios de lanzamiento y agentes .

Peter
fuente
17

En OS X 10.11 (El Capitan), puede utilizar sudo launchctl debug <service-target> --stdout --stderrpara habilitar el registro único, si no desea tomar la opción de sistema de archivos sugerida por @peter.

Muchas cosas son diferentes en la implementación actual de launchctl, y <service-target>es un poco raro. Por ejemplo, supongamos que tengo un servicio local que configuro ~/Library/LaunchAgents/dev.localmon.plist, que tiene la "etiqueta" dev.localmon. Su <service-target>es gui/$UID/dev.localmon, donde $UIDes su ID de usuario, que, desde que se está ejecutando esta en la CLI, shell interpola para usted.

Entonces, suponiendo que mi dev.localmonservicio se bloquee al inicio (fue), podría llamar a lo siguiente para que launchctlcanalice el proceso stdout y stderr del proceso en mi shell la próxima vez (y solo la próxima vez) que se inicie el servicio:

sudo launchctl debug gui/$UID/dev.localmon --stdout --stderr

Como eso se cuelga con los TTY abiertos y listos, vaya a otra terminal y ejecute:

launchctl start dev.localmon
# start is a legacy command and doesn't use the fancy new service-target notation

Luego, de vuelta en la primera terminal, debería ver la salida. (Curiosamente, no se cierra cuando el proceso de servicio muere, por lo que tendrá que hacer Ctrl-C).

Por cierto, una vez que arregle su archivo de configuración con cualquier RUTA o entorno que estaba rompiendo el servicio antes, todavía tiene que usar el viejo launchctl unload ~/Library/LaunchAgents/dev.localmon.plist && launchctl load ~/Library/LaunchAgents/dev.localmon.plistpaso de dos, ya que el supuesto uncachesubcomando de la documentación tiene el siguiente efecto:

El comando aún no está implementado.

Yay por la estrategia de lanzamiento posterior a Jobs de Apple: "Muévete rápido y rompe cosas"

marrón
fuente
sudo launchctl debugsale Could not find domain forconmigo
Tom