Ho scritto un piccolo AppleScript che vorrei eseguire automaticamente ogni 2 ore. Ho quindi scritto il seguente daemon launchd (probabilmente è un agente):
<?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>
Poi ho aperto il terminale e finito
launchctl load ~/Library/LaunchAgents/com.zerowidth.launched.aspect.plist
Ha funzionato bene, ma solo una volta e non ogni due ore. Controllando su Console ho ricevuto i seguenti messaggi (e molti altri ancora):
com.apple.xpc.launchd[1] (com.zerowidth.launched.aspect): This service is defined to be constantly running and is inherently inefficient.
Dec 16 17:02:25 Air-of-myself-2 com.apple.xpc.launchd[1] (com.zerowidth.launched.aspect): Service only ran for 7 seconds. Pushing respawn out by 7193 seconds.
Puoi aiutarmi a capire cosa sta succedendo per favore? Come posso eseguire lo script Apple ogni due ore?
Grazie.
EDIT. Aggiungo, seguendo il consiglio di Robert, lo script Python e l'Applescript.
Ecco lo script Python. Chiede alla console di eseguire il comando LocateMe e da questo ottiene la latitudine e la longitudine del luogo in cui mi trovo. Quindi chiama un'API per ottenere il tramonto e l'ora di alba di questo luogo. Finalmente una piccola funzione decide se è giorno (alba < ora
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()
Ecco l'Applescript: esegue lo script Python sopra e legge il valore booleano (se è giorno o meno). Quindi controlla se la modalità dark su Mojave è attiva e cambia se necessario.
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