9 votos

¿Cómo puedo hacer que Mac OS X ejecute un programa antes de apagarse?

Estoy intentando que Mac OS X guarde todas mis VMs de VirtualBox cuando se reinicie. Ya tengo un script que hace esto, pero necesito que OS X ejecute este script automáticamente antes de un reinicio.

Cuando Mac OS X se reinicia, ¿ejecuta /sbin/reboot?

¿O de qué otra manera podría lograrse?

0 votos

Pregunta duplicada aquí: apple.stackexchange.com/questions/16825/

0 votos

Eso no es un duplicado. No quiero saber cómo ejecutar un script o programa al cerrar la sesión. Quiero saber cómo ejecutar un script o programa al cerrar la sesión.

1 votos

Tienes razón. No es un duplicado exacto. La respuesta en la pregunta enlazada aconseja al usuario colocar su script en /etc/rc.shutdown.local para ejecutarlo al apagar. Parece que eso es lo que estás buscando.

5voto

Oskar Puntos 1242

Launchd envía un aviso de cierre a todos los scripts/demonios que tienen un Subrutina StopService() . Esto le da a su proceso el mayor tiempo de limpieza.

Sólo tienes que utilizar launchd para iniciar el script y hacer que se ejecute en segundo plano hasta que sea el momento de salir.

Después de que los servicios que recibieron la alerta temprana están cerrando, Todos los procesos obtener un SIGTERM señal unos segundos antes de la SIGKILL los bombardea.

Podrías hacer un script que duerma y atrape SIGTERM para ejecutar tu comando cuando llegue ese momento. Tendrás que ver si eso permite suficiente tiempo en la práctica para que los comandos se ejecuten. Esto evita un poco de codificación, pero no mucho - generalmente es mejor hacer un demonio de una shell script.


Desde una perspectiva histórica - /sbin/reboot y los niveles de ejecución nunca existieron en Darwin / OS X y rc.shutdown está obsoleto junto con el resto de rc ahora que launchd es el jefe. Es posible que puedas usar rc.shutdown en tiger o en versiones anteriores (no tengo una de esas imágenes a mano para comprobarlo actualmente) Lion ciertamente ha eliminado todos los vestigios de rc.d e init.d.

Puede que quiera ver si vigilante del sueño ayudaría en su caso. Hace tiempo que no lo utilizo - pero seguro que pretende resolver tu dilema.

0 votos

Resulta que "deprecated" significa "no funciona". :-(

0 votos

Sí, las advertencias empezaron con Tiger y supongo que desaparecieron con Leopard. Es difícil recordar con todos los cambios de Lion dando vueltas en mi cerebro.

0 votos

Esto realmente complica las cosas y hace que Mac OS X sea una plataforma de servidor muy mala.

5voto

llange Puntos 388

Aunque Apple recomienda utilizar " lanzamientod ", lo más fácil es crear un shell script utilizando, por ejemplo, el pico de Terminal:

pico /Users/Shared/logoutHook.sh

El archivo puede contener algo así como

#!/bin/bash
say 'Hasta la vista baby!'

Entonces, da derechos de ejecución:

sudo chmod +x /Users/Shared/logoutHook.sh

Finalmente, engancha el script al procedimiento de cierre de sesión:

sudo defaults write com.apple.loginwindow LogoutHook /Users/Shared/logoutHook.sh

Si inicias otra aplicación, ya que no he probado esto, creo que podría ser útil advertirme y advertirte que:

  • Es posible que tengamos que matar la señal de apagado para ejecutar lo que queremos;

  • A continuación, envíe una nueva (tenga cuidado de no matar la señal enviada por nuestro propio
    script)


Si quieres quitar el gancho:

sudo defaults delete com.apple.loginwindow LogoutHook

Si se utiliza " lanzamientod ", la idea sería capturar la señal SIGTERM. Echa un vistazo: /Sistema/Librería/LaunchDaemons/com.apple.shutdown_monitor.plist

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