1 votos

La reproducción de la ejecución launchd entorno de ejecución

Tengo un script que se ejecuta a la perfección bajo normal shell interactivo, pero que con frecuencia tiene errores cuando se ejecuta como un usuario LaunchAgent.

Hay una manera manualmente, e idealmente de forma interactiva, ejecutar un comando exactamente como se ejecuta por launchd, para facilitar la depuración?


Para ser claros, la secuencia de comandos en la pregunta que hace el trabajo (de forma intermitente) bajo launchd. No es tan simple como la falta de caminos. Sé que launchd utiliza una spartan medio ambiente, pero la situación ahora es:

  • No son frecuentes los fallos intermitentes en virtud de launchd
  • Nunca he reproducido estos fracasos en mi shell de usuario

Como es común, existen numerosas diferencias en el entorno de entre mis completamente configurada de shell de usuario y la mínima launchd contexto, por lo que es muy difícil adivinar lo que la diferencia podría ser la culpa (o si incluso es una variable de entorno que hace la diferencia), que es la razón por la que yo estaba esperando encontrar una manera simple para ejecutar comandos de forma manual y de forma interactiva, exactamente como es que se ejecuta bajo launchd. Estoy sorprendido de que no hay un launchd run subcomando o similar.

3voto

Ted Wrigley Puntos 101

Launchd la ejecución de los trabajos con un intérprete de comandos por defecto que no se puede importar cualquier típicas de las variables de entorno que vas a ver en un shell interactivo; en particular, la variable PATH carece de cualquier tipo de directorios que su shell interactivo podría haber añadido, que puede causar dolores de cabeza. Usted puede evitar que dos maneras:

  • Al hacer su guión como fondo genérico como sea posible: utilizando la ruta de acceso completa de las especificaciones para cada uno de los comandos y utilidad, y la definición explícita de las variables a medida que los necesita, en lugar de confiar en el medio ambiente.
  • Mediante la adición de un EnvironmentVariables diccionario a su launchd plist archivo y especificar el medio ambiente.

El segundo se parece a esto:

<?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>EnvironmentVariables</key>
    <dict>
           <key>VARIABLE_NAME_1</key>
           <string>variable_contents</string>
           <key>VARIABLE_NAME_2</key>
           <string>variable_contents</string>
    </dict>
    < ... >
</dict>
</plist>

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X