¿Es posible ejecutar scripts en sleep y wake?


48

MacBook Pro 2010 con OS X Lion.

¿Es posible ejecutar scripts en los 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. Raramente apago mi MBP ya que cerrar la tapa es mucho más rápido y fácil, pero esto significa que tengo que recordar desmontar mis volúmenes Truecrypt y dejar que se vuelvan a sincronizar antes de cerrar mi MBP. Es lo suficientemente trivial como montar / desmontar los scripts, pero me gustaría ir un paso más allá y hacer que estos scripts se ejecuten automáticamente.

Respuestas:


17

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

No tengo experiencia personal con estos programas o sus proveedores.


2
El escenario parece hacer lo que estoy buscando. ¡Gracias!
sh-beta

Hice que Scenario disparara el applecript que dispara un script de bash y voilá.
olor a

Para finalizar una aplicación, simplemente escriba esto en una nueva ventana de AppleScrip y guárdela en la carpeta SleepScripts: dígale a la aplicación "CodeBox" salga end tell
brainray

24

SleepWatcher puede ser de utilidad.

De la descripción: se puede usar para ejecutar un comando Unix cuando la Mac o la pantalla de la Mac se pone en modo de suspensión o se despierta, después de un tiempo determinado sin interacción del usuario o cuando el usuario reanuda la actividad después de un descanso o cuando el poder El suministro de un portátil Mac está conectado o desconectado. También puede enviar la Mac al modo de suspensión o recuperar el tiempo transcurrido desde la última actividad del usuario.

Me está funcionando bien en 10.6.8. Varias versiones están disponibles para admitir 10.1 (!) Hasta 10.7


Aquí hay un montón de sugerencias para Mac OSX que usan SleepWatcher.
studgeek

44
Puede instalar SleepWatcher de Homebrew , por ejemplo brew install sleepwatcher. Y mira esta publicación , es muy útil. La utilidad SleepWatcher también es compatible con OS X El Capitan (10.11).
Rockallite

11

Esta es mi propia aplicación, así que considere eso, pero ControlPlane tiene la capacidad de realizar acciones basadas en Sleep / Wake. Lo encontrará en http://www.controlplaneapp.com/ .

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


1
Utilidad de sonido muy genial, es demasiado para esto, pero si necesita activarse más que despertarse / dormir, entonces suena bastante bien. También me gusta el soporte de Growl para que sepas lo que está haciendo. Y es gratis :).
studgeek

2
Debería ser la respuesta aceptada porque es gratis
Kevin Parker

¿Se puede usar para montar y desmontar unidades con suspensión y activación? ¿Necesitamos escribir guiones automáticos?
bicepjai

1
años más tarde, el plano de control ahora está sin mantenimiento debido a la acumulación de incompatibilidades que Dustin publicó en su blog y que no tuvo tiempo de arreglar. Lástima, tiene sentido sin embargo.
Lahwran

6

Desarrollé el siguiente Launch Daemon simple para proporcionar un activador 'wake' para 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>

Puede reemplazar 'decir w' con su código. Escribo una fecha en z pero puedes 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

Launch Daemon observa 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 'cambio rápido de usuario' para dormir, encontrará que los scripts que requieren un usuario conectado intentarán ejecutarse demasiado pronto y fallarán a menos que modifique el Launch Daemon, tal vez grep 'Succeeded' en 'secure.log'.


1
/Library/Logs/DirectoryService/DirectoryService.server.logno existe en High Sierra (10.13).
Nowaker

Probablemente hay otros registros que se pueden usar.
Neville Hillyer

2

Otro programa que puede descubrir y sentirse tentado a probar es EventScripts . Aunque es un programa muy impresionante que recomendaría en general, después de probarlo para este propósito, NO parece ser capaz de activar scripts lo suficientemente rápido como para que se ejecuten antes de que su Mac se vaya a dormir, y en su lugar el script de sueño se activará. no se ejecutará hasta que la Mac se haya despertado, lo que (obviamente) anula el propósito.

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

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

ACTUALIZACIÓN He no encontrado sleepwatcher que sea fiable, ya que la escritura originalmente esta respuesta, a pesar de que 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 hasta ahora funciona muy bien: Jettison . Esto se ha convertido rápidamente en una de las pocas utilidades sin las que no puedo vivir. Si sus necesidades son las mismas que las mías, creo que valdrá la pena los pocos dólares que cobran.


1

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

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

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

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.