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.
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:
tell
Befehl zum Beenden der Anwendung1. 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 pmset
finden 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 atrun
Daemon 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 at
es seine Eingabe stdin
standardmäßig übernimmt. Ein einfacherer Ansatz besteht darin, Befehle auszuführen, die in einer Datei aufgelistet sind. Eine Datei kann mit dem -f
Flag 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 atrun
dies 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-sleep
und 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 -e
und fügen Sie einen Eintrag wie diesen hinzu:
59 23 * * * osascript -e 'quit app "Mail"'; pmset sleepnow
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
ephschmied
ephschmied
Tomás Richardson
ephschmied
at
ist es nicht das, was Sie möchten, den Job mit zu planen.cron
oderlaunchd
. Wenn Sie eine einfachere Schnittstelle zum Einrichten wünschen, hilft vielleicht Lingon 3 .