¿Shell o Applescript para retrasar el cierre?

1

Tenemos una estación de trabajo que se usa esporádicamente, y estoy tratando de configurar un script que lo respalde durante el apagado. Creé un LogoutHook en com.apple.loginwindow a un script de bash de 1 línea, que activa un Applescript que compara mis propias entradas de registro para determinar si la copia de seguridad debería ejecutarse. Si es así, llama al Applescript principal que activa una tarea de copia de seguridad de Chronosync.

Todo funciona ... excepto que apenas comienzo la tarea de copia de seguridad antes de que Mac la termine y se apague. Supongo que SIGTERMs y SIGKILLs se están emitiendo y todos los procesos se cumplen rápidamente.

También busqué en la forma "correcta" de hacerlo con launchd (ya que LogoutHooks está en desuso). Launchd no admite realmente la programación de trabajos al cerrarse: requiere iniciar el script al iniciar sesión, dormir / esperar para atrapar un SIGTERM. De nuevo, esto plantea el problema de que todo el sistema se apaga en segundos, desde la pila de la red hasta el demonio Chronosync.

La página del manual para el comando de apagado también indica:

  

Al cerrarse, a todos los procesos en ejecución se les envía un SIGTERM seguido de un SIGKILL. El SIGKILL seguirá al SIGTERM por un período de tiempo intencionalmente indeterminado. Se espera que los programas tomen solo el tiempo suficiente para eliminar todos los datos sucios y salir.

¿Hay alguna forma de retrasar el cierre hasta que todos los scripts estén listos? Idealmente, quiero el mismo comportamiento que el Actualizador de software de Apple, que tarda todo el tiempo que desea instalar las actualizaciones al cerrar la sesión, antes de permitir que la máquina se apague.

    
pregunta Drew 11.10.2013 - 20:14

2 respuestas

3

¿Por qué no solo cambiar el comportamiento de los usuarios en el proceso de cierre para que esto sea mucho más sencillo (con un esfuerzo mínimo en la creación de scripts / programación del gancho de cierre)?

  • Dígales a los usuarios que no utilicen el proceso de apagado estándar (desde el menú o mediante el método abreviado del teclado) y en su lugar, use su AppleScript de respaldo que se transforma en una aplicación llamada algo como SafeShutdown.app
  • Dentro de la secuencia de comandos de la aplicación SafeShutdown , haga la copia de seguridad y luego finalícela con un

    tell application "Finder"
        shut down
    end tell
    

    o con esto (le pedirá una contraseña)

    do shell script "sudo shutdown -h now" with administrator privileges
    

    o con un

    tell application "System Events"
        shut down
    end tell
    
respondido por el M K 11.10.2013 - 22:35
3

¿Sale el script después de que active la copia de seguridad de Chronosync? Si lo hace, intente bloquear el script hasta que finalice la copia de seguridad.

Acabo de intentar cerrar sesión después de ejecutar estos comandos:

sudo defaults write com.apple.loginwindow LogoutHook ~/.logouthook
echo $'#!/bin/bash\nwhile sleep 1; do say a; done' > ~/.logouthook
chmod +x ~/.logouthook

El script de enganche de cierre de sesión todavía se estaba ejecutando después de aproximadamente una hora, por lo que no parece haber ningún límite de tiempo después del cual los enganches de cierre de sesión tienen que terminar.

    
respondido por el user495470 12.10.2013 - 09:40

Lea otras preguntas en las etiquetas