Ich habe ein kleines Applescript geschrieben, das ich alle 2 Stunden automatisch ausführen möchte. Ich habe daher folgenden launchd-Daemon geschrieben (wahrscheinlich ist es ein Agent):
<?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>Disabled</key>
<false/>
<key>Label</key>
<string>com.zerowidth.launched.aspect</string>
<key>Program</key>
<string>/usr/bin/osascript</string>
<key>ProgramArguments</key>
<array>
<string>osascript</string
<string>/Users/***/my_script.scpt</string>
</array>
<key>StandardOutPath</key>
<string>/Users/***/file_log.log</string>
<key>RunAtLoad</key>
<true/>
<key>ThrottleInterval</key>
<integer>7200</integer>
<key>KeepAlive</key>
<true/>
</dict>
</plist>
Dann habe ich Terminal geöffnet und fertig
launchctl load ~/Library/LaunchAgents/com.zerowidth.launched.aspect.plist
Es funktionierte gut, aber nur einmal und nicht alle zwei Stunden. Beim Überprüfen der Konsole erhielt ich die folgenden Meldungen (und tatsächlich noch viele mehr):
com.apple.xpc.launchd[1] (com.zerowidth.launched.aspect): Dieser Dienst ist so definiert, dass er ständig läuft und von Natur aus ineffizient ist.
16. Dezember 17:02:25 Air-of-myself-2 com.apple.xpc.launchd[1] (com.zerowidth.launched.aspect): Der Dienst lief nur 7 Sekunden lang. Respawn wird um 7193 Sekunden verschoben.
Können Sie mir bitte helfen, zu verstehen, was los ist? Wie kann ich das Apple-Skript alle zwei Stunden ausführen?
Danke.
BEARBEITEN. Ich füge, Roberts Rat folgend, das Python-Skript und das Applescript hinzu.
Hier ist das Python-Skript. Es fordert die Konsole auf, den LocateMe-Befehl auszuführen, und erhält daraus den Breiten- und Längengrad des Ortes, an dem ich mich befinde. Ruft dann eine API auf, um die Sonnenuntergangs- und Sonnenaufgangszeit dieses Ortes zu erhalten. Schließlich entscheidet eine kleine Funktion, ob es Tag ist (Sonnenaufgang < jetzt
output = os.popen('/Users/***/Desktop/LocateMe').read()
###I extract my coordinates
coord = output[1:25]
lat = float(coord[1:12]) ###latitude
long = float(coord[13:25]) ### longitude
my_sunrise, my_sunset = get_ris_and_set(lat, long) ##this function calls an API that gives sunset and sunrise time in the position given by (lat,long)
my_sunset1 = my_sunset.time()
my_sunrise1 = my_sunrise.time()
result = str(is_day(now.time(), my_sunrise1, my_sunset1))
### compare the time now and returns true if it is day false otherwise
with open('/Users/***/Desktop/log_file.txt', 'a') as f:
print(result, file=f)
sys.exit()
Hier ist das Applescript: Es führt das obige Python-Skript aus und liest den booleschen Wert (ob es Tag ist oder nicht). Dann prüft es, ob der Dark Mode auf Mojave eingeschaltet ist und schaltet bei Bedarf um.
tell application id "com.apple.systemevents"
tell application "Terminal"
do shell script "/usr/local/bin/python3 /Users/***/Desktop/python.py $@"
end tell
tell appearance preferences
set value to do shell script "tail -n 1 /Users/***/Desktop/log_file.txt"
if dark mode is true and value = "True" then
set dark mode to false
else if dark mode is false and value = "False" then
set dark mode to true
else
return
end if
end tell
end tell
Ist nicht StartInterval
der Schlüssel zum regelmäßigen Laufen? In Ihrem Fall auf 7200 (Sekunden) eingestellt?
Wir müssen alle Ihre Skripte sehen. [ wenn sie kurz sind, oder einfach vor dem Posten. ] Sie könnten das Python-Skript von Ihrer plist aufrufen. Vielleicht haben Sie redundante Schleifenmechanismen in Ihren Skripten. Sie sollten Debug-Informationen in Ihre Skripts einfügen. Schreiben Sie in eine Datei in Ihrem Applescript- und Python-Skript. Fügen Sie so etwas wie "date >> mylogfile#1" in das do-Shell-Skript Ihres Applescripts ein. Überprüfen Sie die Syntax im Terminal:
mac $ date >> mylogfile#1
mac $ date >> mylogfile#1
mac $ date >> mylogfile#1
mac $ cat mylogfile#1
Sun Dec 16 19:32:17 EST 2018
Sun Dec 16 19:32:21 EST 2018
Sun Dec 16 19:32:23 EST 2018
etwas mehr gewicht könnte hilfreich sein. Auf diese Weise können Sie feststellen, ob Ihr Skript aufgerufen wird.
Sie können dies vollständig in Applescript tun. Scrollen Sie nach unten zu „Jetzt müssen wir diesen Befehl regelmäßig im Hintergrund ausführen.“
http://scriptingosx.com/tag/stay-open/
Beachten Sie, wie die Idle-Routine die Zeit zurückgibt, nach der der Idle-Handler erneut aufgerufen wird.
Robert
Zwieback
Romeo
Allan
launchd
Ihr Skript alle zwei Stunden ordnungsgemäß ausgeführt wird. Es scheint jedoch, dass Ihr Skript kontinuierlich ausgeführt wird und es ineffizient ist, ein kontinuierlich ausgeführtes Skript in einem festgelegten Intervall auszuführen. Was soll dein Script machen?Romeo
Allan
KeepAlive
?Allan
Romeo