2 votos

Launchd ejecutar un Applescript cada dos horas

He escrito un pequeño applescript que me gustaría para que se ejecute automáticamente cada 2 horas. He escrito el siguiente launchd demonio (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 hacer

launchctl load ~/Library/LaunchAgents/com.zerowidth.launched.aspect.plist 

Funcionó bien, pero sólo una vez y no cada dos horas. La comprobación de la Consola tengo las siguientes mensajes (y muchos más):

com.apple.xpc.launchd[1] (com.zerowidth.lanzado.de aspecto): Este servicio se define a estar funcionando constantemente y es inherentemente ineficiente.

Dec 16 17:02:25 de Aire-de-mí-2 com.apple.xpc.launchd[1] (com.zerowidth.lanzado.de aspecto): el Servicio sólo se ejecutó durante 7 segundos. Empujando a reaparecer por 7193 segundos.

Me pueden ayudar en la comprensión de lo que está pasando, por favor? ¿Cómo puedo ejecutar el script de apple cada dos horas?

Gracias.


EDIT. Puedo añadir, siguiendo a Robert, el asesoramiento, la secuencia de comandos de Python y el Applescript.

Aquí es la secuencia de comandos de Python. Se pide a la consola para ejecutar el LocateMe de comando y de esto se obtiene la latitud y longitud del lugar donde estoy. A continuación, llama a una API para obtener el atardecer y el amanecer del tiempo de este lugar. Por último 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: se ejecuta la secuencia de comandos de Python arriba y lee el valor booleano (si es de día o no). A continuación, se comprueba si el modo oscuro en Mojave es 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

3voto

Baarn Puntos 4579

1voto

Kerry Puntos 100

Necesitamos ver todas las secuencias de comandos. [ si son de corta duración, o simplemente antes de publicar. ] Usted podría invocar el script en python en su plist. Tal vez usted tiene redundante bucle de mecanismos en los scripts. Usted debe poner la información de depuración de los scripts. Escribir en un archivo en su applescript y phython secuencia de comandos. Poner algo como "fecha >> mylogfile#1" en el applescript a la de la secuencia de comandos de shell. La comprobación de la sintaxis en la 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

un poco más de peso podría ser útil. De esta manera usted puede saber si su script se invoca.

Usted puede hacer esto completamente en applescript. Desplácese hacia abajo para "Ahora tenemos que mantener la ejecución de este comando periódicamente en el fondo. "

http://scriptingosx.com/tag/stay-open/

observe cómo la inactividad de la rutina, es regresar el tiempo después del cual la inactividad controlador será invocar de nuevo.

Robert

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X