1 votos

¿Shell o Applescript para retrasar el cierre?

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.

3voto

M K Puntos 8307

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

  • Dile a los usuarios que no usen el proceso de apagado estándar (desde el menú o a través del atajo de teclado) y que en su lugar usen tu copia de seguridad de AppleScript que se transforma en una aplicación llamada algo así como SafeShutdown.app
  • Dentro de la SafeShutdown aplicación script, haz la copia de seguridad y luego termina con un

    tell application "Finder"
        shut down
    end tell

    o con esto (se le pedirá la contraseña)

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

    o con un

    tell application "System Events"
        shut down
    end tell

3voto

¿El script sale después de activar la copia de seguridad de Chronosync? Si es así, intenta bloquear el script hasta que la copia de seguridad termine.

Acabo de intentar cerrar la 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 gancho de cierre de sesión script seguía funcionando después de una hora aproximadamente, por lo que no parece haber ningún límite de tiempo tras el cual los ganchos de cierre de sesión se vean obligados a terminar.

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