Möglich, Skripte im Schlaf- und Wachzustand auszuführen?

48

MacBook Pro 2010 mit OS X Lion.

Ist es möglich, Skripte für Schlaf- und Wach-Ereignisse auszuführen?

Meine spezielle Anwendung ist, dass ich Dropbox-synchronisierte Truecrypt-Volumes habe, die ich regelmäßig sowohl auf meinem MacBook als auch auf meinem iMac verwende. Ich habe meinen MBP selten heruntergefahren, da das Schließen des Deckels viel schneller und einfacher ist. Dies bedeutet jedoch, dass ich die Bereitstellung meiner Truecrypt-Volumes aufheben und sie synchronisieren muss, bevor ich meinen MBP schließe. Das Ein- und Aushängen von Skripten ist trivial genug, aber ich möchte noch einen Schritt weiter gehen und diese Skripten automatisch ausführen lassen.

sh-beta
quelle

Antworten:

17

Da das Betriebssystem ausgeliefert wird, kann Sleep / Wake keine Skripte auslösen , es wurden jedoch Lösungen von Drittanbietern entwickelt.

Ich habe keine persönlichen Erfahrungen mit diesen Programmen oder deren Anbietern.

Daniel
quelle
2
Das Szenario scheint das zu tun, wonach ich suche. Vielen Dank!
sh-beta
Ich ließ Scenario das Apfelskript abfeuern, das ein Bash-Skript und einen Voilá abfeuert.
duftet
Um eine Anwendung zu beenden,
tippe
24

SleepWatcher kann von Nutzen sein.

Aus der Beschreibung: Es kann verwendet werden, um einen Unix-Befehl auszuführen, wenn der Mac oder das Display des Mac in den Energiesparmodus wechselt oder nach einer bestimmten Zeit ohne Benutzerinteraktion aufwacht oder wenn der Benutzer nach einer Unterbrechung oder bei Stromausfall die Aktivität wieder aufnimmt Lieferung eines Mac Notebooks ist angeschlossen oder getrennt. Sie können den Mac auch in den Ruhemodus versetzen oder die Zeit seit der letzten Benutzeraktivität abrufen.

Es funktioniert gut für mich am 10.6.8. Verschiedene Versionen unterstützen 10.1 (!) Bis 10.7

DaveEmme
quelle
Hier finden Sie eine Reihe von Mac OSX Hints , die SleepWatcher verwenden.
Studgeek
4
Sie können SleepWatcher von Homebrew installieren , z brew install sleepwatcher. Und siehe diesen Beitrag , es ist sehr hilfreich. Das Dienstprogramm SleepWatcher unterstützt auch OS X El Capitan (10.11).
Rockallite
11

Dies ist meine eigene App, aber ControlPlane hat die Möglichkeit, Aktionen basierend auf Sleep / Wake auszuführen. Sie finden es unter http://www.controlplaneapp.com/ .

ControlPlane ist eine Abzweigung von MarcoPolo und wurde für Snow Leopard und Lion aktualisiert.

Dustin
quelle
1
Sehr cool klingendes Dienstprogramm, sein Overkill für genau dies, aber wenn Sie mehr als Wake / Sleep auslösen müssen, dann klingt es ziemlich cool. Ich mag die Growl-Unterstützung auch, damit Sie wissen, was sie tut. Und es ist kostenlos :).
Studgeek
2
Sollte die akzeptierte Antwort sein, weil es kostenlos ist
Kevin Parker
Kann dies zum Ein- und Aushängen von Laufwerken mit Sleep and Wake verwendet werden? Müssen wir Automator-Skripte schreiben?
Bizeps
1
Jahre später wird das Kontrollflugzeug nicht mehr gewartet, da es zu Inkompatibilitäten kommt, die Dustin in seinem Blog gepostet hat und für die er keine Zeit hatte, um sie zu beheben. Schade, macht aber Sinn.
Lahwran
6

Ich habe den folgenden einfachen Launch Daemon entwickelt, um einen Wake-Trigger für Skripte auf Leopard bereitzustellen:

<?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>

Sie können "say w" durch Ihren Code ersetzen. Ich schreibe ein Datum bis z, aber Sie können dies ändern, um etwas zu schreiben. Möglicherweise müssen Sie 'ExitTimeOut' für einige Skripte erhöhen. Mein Launch Daemon befindet sich unter /Library/LaunchDaemons/wake-alert.plist

Der Launch Daemon überwacht DirectoryService.server.log und schreibt in eine temporäre Datei, sofern die Datei leer ist. Die Datei wird durch einen Protokolleintrag "Ruhezustand" und durch Herunterfahren gelöscht.

Wenn Sie im Ruhezustand die Option "Schnelle Benutzerumschaltung" verwenden, werden Sie feststellen, dass Skripts, für die ein angemeldeter Benutzer erforderlich ist, zu früh ausgeführt werden und fehlschlagen, es sei denn, Sie ändern den Launch Daemon - möglicherweise grep "Succeeded" in "secure.log".

Neville Hillyer
quelle
1
/Library/Logs/DirectoryService/DirectoryService.server.logexistiert nicht in High Sierra (10.13).
Nowaker
Es gibt wahrscheinlich andere Protokolle, die verwendet werden können.
Neville Hillyer
2

Ein weiteres Programm, das Sie möglicherweise entdecken und ausprobieren möchten , ist EventScripts . Obwohl es ein sehr beeindruckendes Programm ist, das ich im Allgemeinen empfehlen würde, scheint es nach dem Testen für diesen Zweck NICHT in der Lage zu sein, Skripte schnell genug auszulösen, damit sie ausgeführt werden können, bevor Ihr Mac in den Ruhezustand wechselt, und stattdessen wird das Skript in den Ruhezustand versetzt Erst wenn der Mac aufgewacht ist, läuft er, was (offensichtlich) den Zweck zunichte macht.

Ich hoffe, dass ich Sie und alle anderen, die dies lesen, in den Stunden des Testens retten kann, in denen ich zu diesem Schluss gekommen bin. Es tut mir leid, dass ich sagen muss, dass es fehlgeschlagen ist, weil es in vielerlei Hinsicht ein wirklich gut gestaltetes und recht leistungsfähiges und flexibles Programm ist. Es ist auch recht günstig (3 Dollar). Die Leistung auf niedrigem Niveau scheint jedoch nicht vorhanden zu sein, um ein Skript vor dem Einschlafen auszuführen.

Andererseits hat sich Sleepwatcher in meinen Tests (bisher) als ziemlich zuverlässig und schnell erwiesen . Es ist auch kostenlos, was großartig ist. Ich werde weiter testen und wenn ich finde, dass es manchmal nicht funktioniert, werde ich meine Antwort aktualisieren und weitere Optionen testen.

UPDATE Ich habe nicht Sleepwatcher werden konsequent zuverlässig gefundenda ursprünglich diese Antwortschreiben, obwohl es anfangs arbeiten schien. In meinem Fall muss ich keine willkürlichen Skripte ausführen, sondern nur externe Laufwerke auswerfen. Ich habe eine kleine und kostengünstige App gefunden, die dies bisher sehr gut macht: Jettison . Dies ist sehr schnell zu einem der wenigen Dienstprogramme geworden, ohne die ich nicht leben kann. Wenn Sie dieselben Bedürfnisse haben wie ich, werden Sie es wahrscheinlich für die wenigen Dollar, die sie verlangen, wert finden.

Bilderstürmer
quelle
1

WakeWatcher ist eine einfache gesichtslose OS X-Hintergrundanwendung, die ich erstellt habe, um dieses Problem zu beheben . Es wird ausgeführt, ~/.onwakewenn Wake erkannt wird. Sie können dann die Befehle zum Mounten / Remounten Ihrer Laufwerke in dieses Skript einfügen.

WakeWatcher eignet sich als Login-Objekt. Es ist nicht sehr raffiniert, aber es ist kostenlos und einfach.

Das Ausführen von Skripten im Energiesparmodus wäre eine einfache Ergänzung, aber ich mache mir Sorgen darüber, wie viel Zeit für die Ausführung der Skripten zur Verfügung steht, bevor das System tatsächlich in den Energiesparmodus wechselt. Wenn Sie es wirklich brauchen, eröffnen Sie ein Problem mit dem Github-Projekt und ich werde es hinzufügen.

Eric
quelle