Wie erstelle ich ein AppleScript, das eine Anwendung zu einem bestimmten Zeitpunkt beendet und den Computer dann in den Ruhezustand versetzt?

Ich habe mit AppleScript und Automator herumgespielt, um dieses Ding zum Laufen zu bringen, aber ich kann es einfach nicht in den Kopf bekommen. Wenn mir jemand ein Beispiel zeigen oder Tipps geben könnte, wie ich eine Anwendung so einstellen kann, dass sie zu einer bestimmten Zeit geschlossen wird, und den Computer dann in den Ruhezustand versetzen oder herunterfahren kann, wäre ich sehr dankbar.

Möchten Sie dies regelmäßig tun oder möchten Sie dies manuell anstoßen?
Hast du das AppleScript schon geschrieben?
Es ist etwas, was ich gerne regelmäßig machen möchte und mir keine Sorgen darüber machen muss, es zu initiieren. Ich hatte ein Drehbuch geschrieben, aber es war ziemlich chaotisch, also habe ich es weggeworfen und bin hier gelandet. Danke für deine Antwort. Ich werde es versuchen und hoffe, dass es die Probleme klärt, die ich hatte.
Wenn Sie dies regelmäßig tun möchten, atist es nicht das, was Sie möchten, den Job mit zu planen. cronoder launchd. Wenn Sie eine einfachere Schnittstelle zum Einrichten wünschen, hilft vielleicht Lingon 3 .

Antworten (4)

Ich gehe davon aus, dass Sie dieses Verfahren einleiten möchten, anstatt es regelmäßig zu einem festgelegten Zeitpunkt ausführen zu lassen.

Mein Ansatz wäre, dies über die Befehlszeile zu initiieren, aber alle Befehle können mit einigen Änderungen in einer Shell-Skriptkomponente eines Automator-Skripts ausgeführt werden. Der folgende Ansatz kombiniert einige Komponenten, um die Arbeit zu erledigen:

  1. Ein tellBefehl zum Beenden der Anwendung
  2. Ein Befehlszeilenaufruf, um den Computer in den Ruhezustand zu versetzen
  3. Ein Befehlszeilenaufruf zum Zeitplan 1 und 2 für eine bestimmte Zeit.

1. Der Anwendung sagen, dass sie beendet werden soll

Das kann so einfach sein:

osascript -e 'tell application "AppName" to quit'

2. Versetzen des Computers in den Ruhezustand

Weitere Einzelheiten pmsetfinden Sie unter, aber wenn Sie den folgenden Befehl ausführen, wird Ihr Computer in den Ruhezustand versetzt:

pmset sleepnow

3. Planen einer Operation, die zu einem bestimmten Zeitpunkt ausgeführt werden soll

Schau dir mal den at -Befehl an. Mit diesem Befehl können Sie eine Zeit angeben, zu der ein Befehl ausgeführt werden soll. Sie müssen diese Funktion aktivieren, da sie nicht standardmäßig vorhanden ist. Um den atrunDaemon zu aktivieren, führen Sie den folgenden Befehl aus [Referenz auf SU] :

sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.atrun.plist

Sobald Sie aktiviert haben atrun, kann jeder Befehl für eine bestimmte Zeit geplant werden, indem Sie ihn ausgeben

echo "<command>" | at HH:MM

was funktioniert, weil ates seine Eingabe stdinstandardmäßig übernimmt. Ein einfacherer Ansatz besteht darin, Befehle auszuführen, die in einer Datei aufgelistet sind. Eine Datei kann mit dem -fFlag ausgeführt werden, gefolgt vom Namen des auszuführenden Skripts wie folgt:

at -f /path/to/file HH:MM

Alles zusammenfügen

Im Folgenden wird davon ausgegangen, dass atrundies aktiviert ist. Nehmen wir als Spielzeugbeispiel an, dass ich Mail beenden und den Computer um 23:00 Uhr in den Ruhezustand versetzen möchte. Ich würde eine Datei erstellen, die die Befehle enthält, die ich wie folgt ausführen möchte:

osascript -e 'tell application "Mail" to quit'
pmset sleepnow

Speichern Sie diese Datei unter quit-and-sleepund führen Sie sie dann in der Befehlszeile aus

at -f /path/to/quit-and-sleep 23:00

Vorbehalte

Ich habe nicht überprüft, ob Mail tatsächlich geschlossen wurde. Das Skript geht auch davon aus, dass dem Einschlafen des Computers nichts im Wege steht. Ich habe es hier als Ausgangspunkt für das, was Sie wollen, einfach gehalten.

Sie können eine Veranstaltung einmalig mit planen unter:

at 23:59 <<< 'osascript -e "quit app \"Mail\""; pmset sleepnow'

Oder um es so zu planen, dass es sich jeden Tag wiederholt, bearbeiten Sie die Crontab mit EDITOR=nano crontab -eund fügen Sie einen Eintrag wie diesen hinzu:

59 23 * * * osascript -e 'quit app "Mail"'; pmset sleepnow
um 23:59 <<< 'osascript -e "App \"Mail\" beenden"; pmset sleepnow' funktioniert bei mir nicht. Es heißt "Job 1 at Sat Apr 30 12:47:00 2016", führt den Befehl jedoch nicht aus, wenn die Zeit gekommen ist

Hier ist eine reine Applescript-Version, die dies mit einem fest codierten Zeitwert erreicht. Sie können diesen Teil natürlich interaktiv gestalten, wenn Sie möchten. Außerdem geht diese Version davon aus, dass sich die Zeitangabe auf heute bezieht.

--Get time setting for action to occur
set t to "3:16:30 PM"
--build a time string to use as a target.
set cd to (current date) as text
set AppleScript's text item delimiters to " "
set targetTime to text items 1 thru -3 of cd
set targetTime to date ((targetTime as text) & " " & t)

repeat while (current date) < targetTime
    beep
    delay 30 -- check the time every 30 seconds
end repeat

tell application "Mail"
    quit
end tell

tell application "Finder"
    display dialog "Do you want to shut the computer down now?"
    if button returned of the result is "Ok" then
        shutdown
    end if
end tell

Hier ist Code, der einige Sekunden wartet, bevor er die aktuelle Anwendung beendet und in den Ruhezustand wechselt.

delay (your amount of seconds here)
tell application "System Events"
    key down {command}
    keystroke "q"
    key up {command}
    set volume "1"
    say "computer going to sleep"
    tell application "Finder"
        sleep
    end tell
end tell