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

MacBook Pro 2010 mit OS X Lion.

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

Meine spezifische Anwendung besteht darin, dass ich Dropbox-synchronisierte Truecrypt-Volumes habe, die ich regelmäßig sowohl auf meinem MacBook als auch auf meinem iMac verwende. Ich fahre mein MBP selten herunter, da das Schließen des Deckels viel schneller und einfacher ist, aber das bedeutet, dass ich daran denken muss, meine Truecrypt-Volumes abzumelden und sie wieder synchronisieren zu lassen, bevor ich mein MBP schließe. Es ist trivial genug, das Ein- und Aushängen per Skript auszuführen, aber ich würde gerne noch einen Schritt weiter gehen und diese Skripte automatisch ausführen lassen.

Antworten (8)

Es scheint, dass Sleep/Wake bei Auslieferung des Betriebssystems keine Skripte auslösen kann , aber Lösungen von Drittanbietern entwickelt wurden.

Ich habe keine persönliche Erfahrung mit diesen Programmen oder ihren Anbietern.

Szenario scheint zu tun, was ich suche. Danke!
Ich ließ Scenario das Applescript abfeuern, das ein Bash-Skript abfeuert und voilá.
Um eine Anwendung zu beenden, geben Sie einfach dies in ein neues AppleScrip-Fenster ein und speichern Sie es im SleepScripts-Ordner: tell application "CodeBox" quit end tell

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 Schlafmodus geht oder aufwacht, nach einer bestimmten Zeit ohne Benutzerinteraktion oder wenn der Benutzer seine Aktivität nach einer Pause oder bei Stromausfall wieder aufnimmt Netzteil eines Mac-Notebooks angeschlossen oder abgenommen wird. Es kann 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. Zur Unterstützung von 10.1(!) bis 10.7 stehen verschiedene Versionen zur Verfügung

Hier sind eine Reihe von Mac OSX-Hinweisen , die SleepWatcher verwenden.
Sie können SleepWatcher von Homebrew installieren , zB brew install sleepwatcher. Und siehe diesen Beitrag , er ist sehr hilfreich. Das SleepWatcher-Dienstprogramm unterstützt auch OS X El Capitan (10.11).

Dies ist meine eigene App, also bedenken Sie das, aber ControlPlane hat die Fähigkeit, Aktionen basierend auf Sleep/Wake auszuführen. Sie finden es unter http://www.controlplaneapp.com/ .

ControlPlane ist ein Fork von MarcoPolo und wurde für die Ausführung auf Snow Leopard und Lion aktualisiert.

Sehr cool klingendes Dienstprogramm, es ist übertrieben für genau das, aber wenn Sie auf mehr als Wake/Sleep triggern müssen, dann klingt es ziemlich cool. Ich mag auch die Growl-Unterstützung, damit Sie wissen, was sie tut. Und es ist kostenlos :).
Sollte die akzeptierte Antwort sein, weil sie kostenlos ist
Kann dies zum Mounten und Unmounten von Laufwerken mit Sleep and Wake verwendet werden? Müssen wir Automator-Skripte schreiben?
Jahre später wird ControlPlane aufgrund von Inkompatibilitäten, die Dustin in seinem Blog gepostet hat und für deren Behebung er keine Zeit hatte, nicht mehr gewartet. Schade, macht aber Sinn.

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 „sagen Sie w“ durch Ihren Code ersetzen. Ich schreibe ein Datum zu z, aber Sie könnten dies ändern, um alles 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 Log-'Sleep'-Eintrag und durch Herunterfahren gelöscht.

Wenn Sie „schnelle Benutzerumschaltung“ verwenden, um in den Ruhezustand zu wechseln, werden Sie feststellen, dass Skripte, die einen angemeldeten Benutzer erfordern, versuchen, zu früh ausgeführt zu werden, und fehlschlagen, es sei denn, Sie ändern den Launch Daemon – vielleicht grep „Succeeded“ in „secure.log“.

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

War früher an dieser Frage interessiert, habe aber keine Schritt-für-Schritt-Anleitung gefunden, wie man sie erreicht. Die Lösung basiert auf dem Open-Source-Tool Sleepwatcher und Apple Launchd . Wurde durch diesen Artikel inspiriert

Also viel Spaß! :

  1. Installieren Sie Sleepwatcher =>brew install sleepwatcher
  2. Erstellen Sie zuerst => ~/.wakeupund ~/.sleepSkripte und fügen Sie etwas Shell-Logik hinzu
  3. Fügen Sie die erforderlichen Berechtigungen hinzu =>chmod 700 ~/.sleep && chmod 700 ~/.wakeup
  4. Testen Sie es lokal => /usr/local/sbin/sleepwatcher --verbose --sleep ~/.sleep- Gehen Sie mit laufendem Terminal in den Ruhezustand
  5. Wenn es funktioniert, laden Sie den Prozess als launchd-Agent für alle Benutzer =>/Library/LaunchAgents
  6. Symlink für sleepwatcher launchd task => hinzufügensudo ln -sfv /usr/local/Cellar/sleepwatcher/2.2/de.bernhard-baehr.sleepwatcher-20compatibility.plist /Library/LaunchAgents/
  7. Launchd-Task laden =>sudo launchctl load /Library/LaunchAgents/de.bernhard-baehr.sleepwatcher-20compatibility.plist

Hoffe, es wird jemandem helfen :)

sleepwatcher funktioniert bei mir nicht auf calalina mit einer internen SSD-Festplatte. Ich denke, die SSD ist so schnell, dass der Computer schläft, bevor das Skript ausgeführt werden kann.
Scheint bei mir nicht zu funktionieren. Ich bin auf Catalina und renne einfach /usr/local/sbin/sleepwatcher --verbose --sleep ~/.sleepauf.
@ user3056783 Ich denke, es funktioniert tatsächlich so, wie es hängen sollte, wenn Sie es im Terminal ausführen. Aus diesem Grund sollte es als Daemon-Prozess über LaunchAgents ausgeführt werden, wie ich in weiteren Schritten erwähnt habe.
das funktioniert bei mir in Catalina! Sie können nur tun brew install sleepwatcher, um es zu bekommen. Danke!
Bei mir hat das funktioniert: und dann die Datei brew services start sleepwatcher; sudo cp /usr/local/Cellar/sleepwatcher/2.2.1/etc/sleepwatcher/rc.* /etchinzugefügt .~/.sleep

Ich verwende Keyboard Maestro ( https://www.keyboardmaestro.com/ ), keine Zugehörigkeit. Es kann eine Aktion auslösen, wenn das System in den Ruhezustand wechselt oder neben unzähligen anderen Funktionen aufwacht, um die Arbeit mit dem Mac zu erleichtern.

Geben Sie hier die Bildbeschreibung ein

Ich habe die Sleep/Wake-Ereignisse verwendet, um eine URL auszulösen, die eine Verbindung zu einem IOT-Gerät herstellt, das ich entworfen habe, um einen externen Lüfter zu steuern, den ich oben auf dem Mac Mini platziert habe (der Mac steht auf dem Kopf).

Geben Sie hier die Bildbeschreibung ein

Ein weiteres Programm, das Sie vielleicht 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, bevor Ihr Mac in den Ruhezustand wechselt, und stattdessen das Schlafskript nicht ausführen, bis der Mac aufgewacht ist, was (offensichtlich) den Zweck verfehlt.

Ich hoffe, Ihnen und allen anderen, die dies lesen, die Stunden des Testens zu ersparen, die ich brauchte, um zu dieser Schlussfolgerung zu gelangen. Es tut mir jedoch leid, sagen zu müssen, dass es fehlgeschlagen ist, weil es in so vieler Hinsicht ein wirklich schön gestaltetes und ziemlich leistungsfähiges und flexibles Programm ist. Es ist auch recht günstig ($3). Die Low-Level-Leistung scheint jedoch einfach nicht da zu sein, um ein Skript vor dem Schlafen auszuführen.

Andererseits hat sich Sleepwatcher in meinen (bisherigen) Tests als recht 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 andere Optionen weiter testen.

UPDATE Ich habe festgestellt , dass Sleepwatcher seit dem ursprünglichen Schreiben dieser Antwort nicht durchgehend zuverlässig ist, obwohl es anfangs zu funktionieren schien. In meinem Fall muss ich keine beliebigen Skripte ausführen, sondern nur externe Laufwerke auswerfen. Ich habe eine kleine und preiswerte App gefunden, die das bisher sehr gut macht: Jettison . Dies ist sehr schnell zu einem der wenigen Dienstprogramme geworden, ohne die ich nicht leben kann. Wenn Ihre Bedürfnisse die gleichen sind wie meine, werden Sie feststellen, dass es die paar Dollar wert ist, die sie verlangen.

WakeWatcher ist eine einfache gesichtslose Hintergrundanwendung für OS X, die ich erstellt habe, um dieses Problem zu lösen. 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-Item. Es ist nicht sehr anspruchsvoll, aber es ist kostenlos und einfach.

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