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.