¿Es posible ejecutar scripts en modo de espera y activación?

43

MacBook Pro 2010 con OS X Lion.

¿Es posible ejecutar scripts en eventos de suspensión y activación?

Mi aplicación específica es que tengo volúmenes Truecrypt sincronizados con Dropbox que uso regularmente tanto en mi MacBook como en mi iMac. Rara vez apago mi MBP ya que cerrar la tapa es mucho más rápido y fácil, pero esto significa que debo recordar desmontar mis volúmenes de Truecrypt y dejar que se sincronicen antes de cerrar mi MBP. Es lo suficientemente trivial para el montaje / desmontaje de scripts, pero me gustaría ir un paso más allá y hacer que estos scripts se ejecuten automáticamente.

    
pregunta sh-beta 08.10.2011 - 20:55

6 respuestas

15

Parece que a medida que se envía el sistema operativo, sleep / wake no puede activar scripts , pero las soluciones de terceros han sido desarrollado.

No tengo experiencia personal con estos programas o sus proveedores.

    
respondido por el Daniel 08.10.2011 - 21:24
21

SleepWatcher puede ser de utilidad.

De la descripción: Puede usarse para ejecutar un comando de Unix cuando la Mac o la pantalla de la Mac pasan al modo de suspensión o se despiertan, después de un tiempo determinado sin interacción del usuario o cuando el usuario reanuda la actividad después de una interrupción o cuando la fuente de alimentación de una computadora portátil Mac está conectada o desconectada. También puede enviar el Mac al modo de suspensión o recuperar el tiempo transcurrido desde la última actividad del usuario.

Está funcionando bien para mí en 10.6.8. Varias versiones están disponibles para ser compatibles con 10.1 (!) Hasta 10.7

    
respondido por el DaveEmme 08.10.2011 - 22:43
10

Esta es mi propia aplicación, así que considera eso, pero ControlPlane tiene la capacidad de realizar acciones basadas en el modo de reposo / activación. Lo encontrará en enlace .

ControlPlane es una bifurcación de MarcoPolo y se ha actualizado para ejecutarse en Snow Leopard y Lion.

    
respondido por el Dustin 08.10.2011 - 23:14
4

Desarrollé el siguiente sencillo Daemon de lanzamiento para proporcionar un activador de "activación" para los scripts en Leopard:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Label</key>
    <string>wake-alert</string>
    <key>ProgramArguments</key>
    <array>
        <string>/bin/bash</string>
        <string>-c</string>
        <string>z=/tmp/wake; test -s $z || { date > $z; say w; }; 
tail -1 /Library/Logs/DirectoryService/DirectoryService.server.log | grep -v Sleep || > $z
        </string>
    </array>
    <key>WatchPaths</key>
    <array>
        <string>/Library/Logs/DirectoryService/DirectoryService.server.log</string>
    </array>
    <key>ExitTimeOut</key>
    <integer>2</integer>
    <key>ThrottleInterval</key>
    <integer>1</integer>
</dict>
</plist>

Puedes reemplazar 'say w' con tu código. Escribo una fecha en z, pero podrías cambiar esto para escribir cualquier cosa. Es posible que deba aumentar 'ExitTimeOut' para algunos scripts. My Launch Daemon reside en /Library/LaunchDaemons/wake-alert.plist

El Launch Daemon mira DirectoryService.server.log y escribe en un archivo temporal siempre que el archivo esté vacío. El archivo se borra con una entrada de registro 'Suspender' y con Apagar.

Si usa el 'cambio rápido de usuario' para dormir, encontrará que los scripts que requieren un usuario registrado intentarán ejecutarse demasiado pronto y fallarán a menos que modifique el Daemon de inicio - tal vez grep 'Sucedido' en 'secure.log' .

    
respondido por el Neville Hillyer 27.02.2014 - 22:45
2

Otro programa que puedes descubrir y que puedes tener la tentación de probar es EventScripts . Aunque es un programa muy impresionante que recomendaría en general, después de probarlo para este fin, parece que NOT en realidad parece ser capaz de activar scripts lo suficientemente rápido para que puedan corre antes de que tu Mac entre en suspensión, y en lugar de eso, el script de suspensión no se ejecutará hasta que la Mac se haya activado, lo que (obviamente) anula el propósito.

Espero salvarte a ti y a cualquier otra persona que lea esto durante las horas de prueba que me llevó a llegar a esta conclusión. Lamento tener que decir que falló, sin embargo, porque en muchos aspectos es un programa muy bien diseñado, bastante potente y flexible. También es bastante barato ($ 3). Sin embargo, el rendimiento de bajo nivel parece no estar allí para ejecutar un script antes de durmiendo.

Por otra parte, en mis pruebas (hasta ahora) sleepwatcher parece ser bastante confiable y rápido. También es gratis, lo que es increíble. Seguiré haciendo pruebas y si encuentro que no funciona, a veces actualizaré mi respuesta y seguiré probando otras opciones.

UPDATE no encontré que el sleepwatcher es siempre confiable desde que escribí esta respuesta, aunque inicialmente parecía estar funcionando. En mi caso, no necesito ejecutar scripts arbitrarios, sino expulsar unidades externas. He encontrado una aplicación pequeña y económica que lo hace muy bien hasta ahora: Jettison . Esto se ha convertido muy rápidamente en uno de los pocos servicios públicos con los que no puedo vivir. Si sus necesidades son las mismas que las mías, creo que valdrá la pena por los pocos dólares que cobran.

    
respondido por el iconoclast 18.08.2013 - 15:37
0

WakeWatcher es una aplicación de fondo sin rostro simple de OS X que creé para solucionar este problema. Se ejecuta ~/.onwake cada vez que se detecta la activación. Luego puede poner los comandos para montar / volver a montar sus unidades en ese script.

WakeWatcher es adecuado para usar como un elemento de inicio de sesión. No es muy sofisticado, pero es gratis y simple.

Ejecutar scripts en el modo de suspensión sería una adición simple, pero me preocupa el tiempo disponible para que los scripts se completen antes de que el sistema realmente se duerma. Si realmente lo necesitas, abre un problema contra el proyecto github y lo agregaré.

    
respondido por el Eric 10.08.2016 - 07:21

Lea otras preguntas en las etiquetas