El cierre de la secuencia de comandos launchd ya no funciona en Yosemite

-1

Soy nuevo en este foro; por favor disculpe cualquier paso en falso. He estado usando rsync disparado por un LaunchDaemon escrito en tcsh por varios años. Funcionó muy bien en mi MacBook Pro 2008 bajo Snow Leopard. Ahora tengo un MBP 2014 ejecutando Yosemite. He aclarado algunos conflictos, pero uno sigue eludiéndome. Mi script funciona así:

  1. Monté una unidad externa.
  2. launchd comienza mi script
  3. Mi script verifica que la unidad correcta esté disponible.
  4. Mi script copia algunas carpetas de la computadora de mi esposa a la mía y de la mía a la suya.
  5. Mi secuencia de comandos envía un comando shutdown a la computadora de mi esposa.
  6. Mi script copia algunas carpetas de nuestra computadora de respaldo a la mía y de la mía a ella.
  7. Mi secuencia de comandos envía un comando shutdown a nuestra computadora de respaldo.
  8. Mi script copia algunas carpetas de mi computadora a la unidad externa.
  9. Mi secuencia de comandos envía un comando shutdown a mi computadora.

    Como dije, esto funcionó bien durante varios años bajo Snow Leopard. Ahora que estoy ejecutando Yosemite, los pasos 4, 6 y 8 fallan aparentemente sin generar ningún error. En la secuencia de comandos original, utilicé osascript para lanzar un Applescript que comprobó algunas cosas y luego le dije a System Events que apagara la computadora. Cuando esto no funcionó en Yosemite, cambié a un simple comando shutdown -h +1 en el script tcsh . Esto hizo que el paso 8 funcionara correctamente, pero no hizo nada para los pasos 4 y 6. Idealmente, me gustaría volver al comando Applescript shutdown porque parece más limpio: las aplicaciones tienen la oportunidad de cerrar o incluso cancelar el apagado si es necesario .

    Un punto más que debo señalar es que estoy usando ssh -f en el usuario root en las otras dos computadoras para enviar los comandos shutdown . He configurado las computadoras con las claves RSA de mi computadora para habilitar un inicio de sesión sin contraseña, por lo que el comando actual es solo ssh -f [email protected] 'shutdown -h +1' .

    He confirmado que funciona para guardar mi computadora en la computadora de mi esposa y apagarlo manualmente. Es solo el script que no apaga la otra computadora.

    Alguien tiene alguna idea de por qué esto no funciona en Yosemite. Más importante aún, ¿alguna idea de cómo hacer que funcione? Me gustaría poder ejecutar la copia de seguridad y luego irme a la cama, sabiendo que las computadoras se apagarán cuando se complete el proceso.

Gracias de antemano.

    
pregunta Uniquark 31.01.2015 - 03:19

1 respuesta

0

Creo que he encontrado la causa del problema, o al menos una supuesta explicación y una forma de hacer lo que quiero.

Resulta que apagar la computadora parece estar simplemente prohibido desde un demonio. Me imagino que Apple considera que es un riesgo de seguridad, pero no he encontrado ninguna información al respecto. El bit que encontré fue un comentario de que los demonios no pueden lanzar una GUI con un enlace a Mac Biblioteca de Desarrolladores, Demonios y Agentes . Por lo que vale, debo haberme equivocado cuando escribí que el Paso 8 funcionó cuando usé shutdown -h +1 porque tuve que usar esta otra solución en los tres pasos de shutdown.

Entonces, la solución parece ser que necesito un agente para ver si hay una señal de mi demonio que apague la computadora. Estoy ejecutando el script principal como un demonio porque necesita acceso de root para copiar archivos de varios usuarios diferentes. El agente se ejecuta en cada computadora que deberá apagarse y la secuencia de comandos principal se ejecuta en mi computadora. Cuando la secuencia de comandos principal se realiza con una computadora en particular, envía la señal para apagar esa computadora, incluida mi computadora cuando se termina la secuencia de comandos principal.

Estoy seguro de que hay mejores maneras de hacerlo, pero mi conocimiento de Unix y de scripting es muy irregular, por lo que simplemente configuré al agente para que vea una carpeta en particular para que aparezca un archivo en particular. Cuando ese archivo aparece, el agente elimina el archivo y ejecuta el comando osascript para apagar la computadora. Por lo tanto, la señal enviada por el script principal es simplemente tocar / Apagar / Ahora. Es complicado, pero funciona lo suficientemente bien para mí.

    
respondido por el Uniquark 03.02.2015 - 22:47

Lea otras preguntas en las etiquetas