He escrito un pequeño applecript que me gustaría ejecutar automáticamente cada 2 horas. Por lo tanto, he escrito el siguiente demonio de launchd (probablemente es 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>
Luego he abierto el terminal y listo
launchctl load ~/Library/LaunchAgents/com.zerowidth.launched.aspect.plist
Funcionó bien, pero solo una vez y no cada dos horas. Comprobando en la Consola recibí los siguientes mensajes (y muchos más en realidad):
com.apple.xpc.launchd [1] (com.zerowidth.launched.aspect): Este servicio está definido para ejecutarse constantemente y es inherentemente ineficiente.
16 de diciembre 17:02:25 aire-de-yo-2 com.apple.xpc.launchd [1] (com.zerowidth.launched.aspect): el servicio solo se ejecutó durante 7 segundos. Empujando el respawn hacia fuera por 7193 segundos.
¿Puedes ayudarme a entender lo que está pasando, por favor? ¿Cómo puedo ejecutar el script de Apple cada dos horas?
Gracias.
EDITAR. Agrego, siguiendo el consejo de Robert, el script de Python y el Applescript.
Aquí está la secuencia de comandos de Python. Le pide a la consola que ejecute el comando LocateMe y de esto obtiene la latitud y la longitud del lugar donde estoy. Luego llama a una API para obtener la hora de salida y puesta del sol de este lugar. Finalmente, una pequeña función decide si es de día (amanecer < ahora
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()
Aquí está el Applescript: ejecuta el script de Python arriba y lee el valor booleano (si es de día o no). Luego verifica si el modo oscuro en Mojave está activado y cambia si es necesario.
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