È possibile eseguire script su sleep e wake?

44

MacBook Pro 2010 con OS X Lion.

È possibile eseguire script sugli eventi di sospensione e attivazione?

La mia specifica applicazione è che ho volumi TrueCrypt sincronizzati su Dropbox che uso regolarmente sia su MacBook sia su iMac. Raramente spengo il mio MBP poiché chiudere il coperchio è molto più veloce e più facile, ma questo significa che devo ricordare di smontare i miei volumi di Truecrypt e lasciarli sincronizzare di nuovo prima di chiudere il mio MBP. È abbastanza semplice copiarli in montaggio / smontaggio, ma mi piacerebbe fare un ulteriore passo avanti e far sì che questi script vengano eseguiti automaticamente.

    
posta sh-beta 08.10.2011 - 20:55
fonte

6 risposte

15

Sembra che mentre il sistema operativo viene spedito, sleep / wake non può attivare script , ma soluzioni di terze parti sono state sviluppato.

Non ho esperienza personale con questi programmi o con i loro fornitori.

    
risposta data 08.10.2011 - 21:24
fonte
21

SleepWatcher può essere utile.

Dalla descrizione: Può essere usato per eseguire un comando Unix quando il Mac o il display del Mac passa in modalità sospensione o si riattiva, dopo un determinato intervallo di tempo senza interazione dell'utente o quando l'utente riprende l'attività dopo una pausa o quando l'alimentazione di un notebook Mac è collegata o staccata. Può anche inviare il Mac in modalità sospensione o recuperare il tempo dall'ultima attività utente.

Funziona bene per me su 10.6.8. Sono disponibili varie versioni per supportare 10.1 (!) Fino a 10.7

    
risposta data 08.10.2011 - 22:43
fonte
10

Questa è la mia app, quindi considera che, ma ControlPlane ha la capacità di fare azioni basate su Sleep / Wake. Lo troverai sul link .

ControlPlane è un fork di MarcoPolo ed è stato aggiornato per essere eseguito su Snow Leopard e Lion.

    
risposta data 08.10.2011 - 23:14
fonte
4

Ho sviluppato il seguente Launch Daemon per fornire un trigger 'wake' per gli script su 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>

Puoi sostituire 'say w' con il tuo codice. Scrivo una data su z ma potresti cambiarla per scrivere qualcosa. Potrebbe essere necessario aumentare "ExitTimeOut" per alcuni script. My Launch Daemon si trova in /Library/LaunchDaemons/wake-alert.plist

Il Launch Daemon controlla DirectoryService.server.log e scrive in un file temporaneo a condizione che il file sia vuoto. Il file viene cancellato da una voce di log 'Sleep' e da Arresta il sistema.

Se si utilizza il "passaggio rapido dell'utente" per la sospensione, si scoprirà che gli script che richiedono un utente connesso cercheranno di essere eseguiti troppo presto e falliranno a meno che non si modifichi il Launch Daemon - forse grep "Riuscito" in "secure.log" .

    
risposta data 27.02.2014 - 22:45
fonte
2

Un altro programma che potresti scoprire e tentare di provare è EventScripts . Anche se è un programma molto impressionante che consiglierei in generale, dopo averlo testato a questo scopo, NON sembra in realtà in grado di attivare gli script in modo sufficientemente rapido da consentire loro di corri prima che il tuo Mac vada a dormire, e invece lo script di sospensione non verrà eseguito fino a dopo che il Mac si sarà svegliato, il che (ovviamente) vanifica lo scopo.

Spero di salvare te e chiunque altro leggendo questo le ore di test che mi ci sono voluti per arrivare a questa conclusione. Mi dispiace dover dire che ha fallito, tuttavia, perché sotto molti aspetti è un programma davvero ben progettato e abbastanza potente e flessibile. È anche abbastanza economico ($ 3). Tuttavia, le prestazioni di basso livello non sembrano essere lì, tuttavia, per eseguire uno script prima che dorme.

D'altra parte, nei miei test (finora) sleepwatcher è apparso abbastanza affidabile e veloce. È anche gratuito, il che è fantastico. Continuerò i test e se trovassi che non funziona a volte aggiornerò la mia risposta e continuerò a testare altre opzioni.

UPDATE Ho trovato non che sleepwatcher è sempre affidabile dal momento che in origine scrivevo questa risposta, anche se inizialmente sembrava funzionare. Nel mio caso non ho bisogno di eseguire script arbitrari, ma piuttosto di espellere unità esterne. Ho trovato una piccola e poco costosa app che funziona molto bene finora: Jettison . Questo è diventato molto rapidamente uno di una piccola manciata di utilità di cui non posso vivere senza. Se i tuoi bisogni sono uguali ai miei, penso che lo troverai perfetto per i pochi dollari che pagano.

    
risposta data 18.08.2013 - 15:37
fonte
0

WakeWatcher è una semplice applicazione in background senza volto di OS X che ho creato per risolvere questo problema. Esegue ~/.onwake ogni volta che viene rilevata la scia. È quindi possibile inserire i comandi per montare / rimontare le unità in quello script.

WakeWatcher è adatto per l'uso come elemento di accesso. Non è molto sofisticato, ma è gratuito e semplice.

Eseguire gli script sul sonno sarebbe una semplice aggiunta, ma sono preoccupato del tempo a disposizione per gli script da completare prima che il sistema in effetti vada in stop. Se ne hai davvero bisogno, apri un problema contro il progetto github e lo aggiungerò.

    
risposta data 10.08.2016 - 07:21
fonte

Leggi altre domande sui tag