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

8

Ich habe mit AppleScript und Automator herumgespielt, um dieses Ding zum Laufen zu bringen, aber ich kann einfach nicht meinen Kopf darum wickeln. Wenn mir jemand ein Beispiel zeigen oder mir einige Tipps geben könnte, wie ich festlegen kann, dass eine Anwendung zu einem bestimmten Zeitpunkt geschlossen wird und der Computer dann in den Ruhezustand versetzt oder heruntergefahren wird, wäre ich sehr dankbar.

Tomás Richardson
quelle
Möchten Sie, dass dies regelmäßig durchgeführt wird, oder möchten Sie dies manuell initiieren?
Ephsmith
Hast du das AppleScript schon geschrieben?
Ephsmith
Es ist etwas, das ich regelmäßig machen möchte und das ich mir keine Sorgen um die Initiierung machen muss. Ich hatte ein Skript 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 hoffentlich klärt es die Probleme, die ich hatte.
Tomás Richardson
Wenn Sie dies regelmäßig erledigen 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 möglicherweise Lingon 3 .
Ephsmith

Antworten:

14

Ich gehe davon aus, dass Sie dieses Verfahren einleiten möchten, anstatt es zu einem regelmäßig geplanten 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 Energiesparmodus zu versetzen
  3. Ein Befehlszeilenaufruf zum Planen von 1 und 2 für eine bestimmte Zeit.

1. Fordern Sie die Anwendung auf, das Programm zu beenden

Dies kann so einfach sein wie:

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

2. Schalten Sie den Computer aus

Werfen Sie einen Blick auf , pmsetum weitere Informationen, aber den folgenden Befehl ausgeben wird setzen Sie Ihren Computer zu schlafen:

pmset sleepnow

3. Planen eines Vorgangs, der zu einem bestimmten Zeitpunkt ausgeführt werden soll

Schauen Sie sich den Befehl at 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 aktiviert ist. atrunFühren Sie zum Aktivieren des Dämons 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 durch Ausgabe für eine bestimmte Zeit geplant werden

echo "<command>" | at HH:MM

Das funktioniert, weil ates stdinstandardmäßig eingegeben wird. Ein einfacherer Ansatz besteht darin, Befehle auszuführen, die in einer Datei aufgeführt sind. Eine Datei kann mithilfe des -fFlags ausgeführt werden, gefolgt vom Namen des Skripts, das wie folgt ausgeführt werden soll:

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

Alles zusammenfügen

Was folgt, setzt voraus, dass atrunaktiviert ist. Nehmen wir als Spielzeugbeispiel an, ich möchte Mail beenden und den Computer um 23:00 Uhr in den Ruhezustand versetzen. Ich würde eine Datei mit den Befehlen erstellen, die wie folgt ausgeführt werden sollen:

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

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

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

Vorsichtsmaßnahmen

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

Ephsmith
quelle
1

Hier ist eine streng Applescript-Version, die dies bei 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 Zeitzeichenfolge 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
Paul Skinner
quelle
1

Sie können eine Veranstaltung einmal planen mit:

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

Oder um die tägliche Wiederholung zu planen, bearbeiten Sie die Crontab mit EDITOR=nano crontab -eund fügen Sie einen Eintrag wie den folgenden hinzu:

59 23 * * * osascript -e 'quit app "Mail"'; pmset sleepnow
Lri
quelle
um 23:59 <<< 'osascript -e "App beenden" Mail "; pmset sleepnow 'funktioniert bei mir nicht. Es heißt "Job 1 am Samstag, 30. April, 12:47:00 2016", führt aber den Befehl nicht aus, wenn die Zeit gekommen ist
oluckyman,
0

Hier ist der 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
imagophereatingapickle
quelle