2011-06-13 10 views
9

Tengo algunos scripts Launchd de homebrew. Sin embargo tengo que ejecutar manualmente al reiniciar el equipo:¿Cómo puedo depurar un script Launchd que no se ejecuta en el inicio?

launchctl load -w ~/Library/LaunchAgents/com.mysql.mysqld.plist 

<?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>KeepAlive</key> 
    <true/> 
    <key>Label</key> 
    <string>com.mysql.mysqld</string> 
    <key>Program</key> 
    <string>/Users/dash/.local/Cellar/mysql/5.1.49/bin/mysqld_safe</string> 
    <key>RunAtLoad</key> 
    <true/> 
    <key>UserName</key> 
    <string>dash</string> 
    <key>WorkingDirectory</key> 
    <string>/Users/dash/.local/var</string> 
</dict> 
</plist> 

pensé que esto debería ocurrir en el inicio. ¿Qué me estoy perdiendo?

+0

No creo que esto tenga ningún efecto (por lo tanto, no lo estoy convirtiendo en una respuesta), pero intente ejecutarlo sin el indicador "-w" para una prueba (es decir, "launchctl load ~/Library/LaunchAgents" /com.mysql.mysqld.plist ") y luego reiniciar. O bien, tal vez intente con la ruta completa del archivo al plist (por ejemplo, /Users/{you}/Library/LaunchAgents/com.mysql.mysqld.plist). Solo adivinando aquí. –

+1

No es realmente una respuesta, pero estoy seguro de que [LaunchControl] (http://www.soma-zone.com/LaunchControl) le dirá por qué. – LCC

+0

Revisa mi [respuesta] (http://stackoverflow.com/a/15820488/711807) a un problema similar. –

Respuesta

2

Una posibilidad: Busque en el directorio:

/private/var/db/launchd.db/ 

y fino el archivo para el usuario "com.apple.launchd.peruser ###.". Abrir eso y ver si hay una entrada como:

<key>com.mysql.mysqld.plist</key> 
<dict> 
    <key>Disabled</key> 
    <true/> 
</dict> 

Si es así, intente configurarla a <false/>. Otro archivo para buscar lo mismo es:

/private/var/db/launchd.db/com.apple.launchd/overrides.plist 
+0

Parecía prometedor, pero lamentablemente fue '' –

+0

¿Quizás intente cortarlo todo junto? No veo cómo eso haría ninguna diferencia, pero estoy agarrando pajitas. –

0

Trate de renombrarlo. Cambiar el nombre del archivo a:

~/Library/LaunchAgents/com.mysql.mysqld2.plist 

y la sección de la etiqueta en el plist a:

<key>Label</key> 
<string>com.mysql.mysqld2</string> 

Si guarda una copia de seguridad, asegúrese de mover fuera de su ~// LaunchAgents/directorio de la biblioteca .

Finalmente, en lugar de usar launchctl para cargarlo, simplemente cierre sesión y vuelva a iniciar sesión. Esto permitirá que launchd lo recoja de su directorio "LaunchAgents" y tome una variable más (es decir, launchctl) de la mezcla.

12

mejor manera que encontré para depurar, en su plist:

<key>StandardErrorPath</key> 
<string>/tmp/mycommand.err</string> 
<key>StandardOutPath</key> 
<string>/tmp/mycommand.out</string> 

Abrir consola aplicación, en "Todos los mensajes" debería ver entradas cuando la aplicación falla o tiene éxito. De esta manera:

4/28/15 10:43:19.938 AM com.apple.xpc.launchd[1]: (mycommand[18704]) Service exited with abnormal code: 1 

El problema que tuve fue con ProgramArguments toma cada elemento de mando como <string> elemento de la matriz.

EDITAR: En mi caso, generar un envoltorio simple para el guión de shell funcionó aún mejor. Este script configura la estructura básica de carpetas para convertir un script de shell en una "aplicación" de OS X - https://gist.github.com/mathiasbynens/674099. Esto podría funcionar mejor para su comando mysql -u arg1.

0

El comando de arranque espera que la etiqueta de trabajo ya que es el argumento, por lo que tendría que empezar con el siguiente ...

launchctl start com.myfile.hostname.plist 

Para detener, simplemente haga lo siguiente ...

launchctl stop com.myfile.hostname.plist 

Una vez que todas sus pruebas hayan finalizado, cerrará la sesión y, luego, la cargará o si su archivo plist está en la carpeta Biblioteca del usuario, escriba lo siguiente ...

launchctl load ~/Library/LaunchAgents/com.myfile.hostname.plist 
-1

Responder a esta para los futuros empleados de Google

El comando que busca es

sudo tail -F /var/log/system.log | grep --line-buffered \ 
"com.apple.launchd\[" | grep "com.example.app" 

Si eso no ayuda en la depuración simplemente añadir StandardOutPath o StandardErrorPath llaves de su * .plit archivo y compruebe los registros:

<key>StandardOutPath</key> 
<string>/tmp/test.stdout</string> 
<key>StandardErrorPath</key> 
<string>/tmp/test.stderr</string> 

mira esto http://www.launchd.info/

proporciona toda la información necesaria relativa a Configuración/Solución de problemas relativos a launchd.

Cuestiones relacionadas