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 bash de una línea script, que activa un Applescript que compara mis propias entradas de registro para determinar si la copia de seguridad debe ejecutarse. Si es así, llama al Applescript principal, que activa una copia de seguridad de Chronosync.
Todo funciona... excepto que apenas empiezo el trabajo de copia de seguridad antes de que el Mac lo termine y se apague. Supongo que se emiten SIGTERMs y SIGKILLs y todos los procesos se cumplen rápidamente.
También investigué la forma "adecuada" de hacerlo con launchd (ya que los LogoutHooks son obsoletos). Launchd no permite programar tareas al apagarse: 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 red hasta el demonio de Chronosync.
La página del hombre para el comando de apagado también dice:
Al apagarse, a todos los procesos en marcha 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 sólo tomen el tiempo suficiente para eliminar todos los datos sucios y salir.
¿Hay alguna manera de retrasar el apagado hasta que mis scripts hayan terminado? Lo ideal sería que se comportara como el Actualizador de Software de Apple, que tarda tanto como quiere en instalar las actualizaciones al cerrar la sesión, antes de permitir que la máquina se apague.