Avvia eseguito un oggetto Applescript ogni due ore

1

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
    
posta Romeo 16.12.2018 - 17:12
fonte

2 risposte

2

Non è StartInterval la chiave per essere eseguita periodicamente? Nel tuo caso, impostare su 7200 (secondi)?

link

    
risposta data 22.12.2018 - 13:18
fonte
1

Abbiamo bisogno di vedere tutti i tuoi script. [se sono brevi, o semplicemente prima di pubblicare. ] Puoi invocare lo script python dal tuo plist. Forse hai meccanismi di loop ridondanti nei tuoi script. Dovresti inserire le informazioni di debug negli script. Scrivi su un file nel tuo script applecript e phython. Metti qualcosa come "date > > mylogfile # 1" nello script di shell do del tuo applecript. Verifica della sintassi nel terminale:

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 po 'di più potrebbe essere utile. In questo modo puoi sapere se il tuo script è stato invocato.

Puoi farlo interamente in mele. Scorri verso il basso fino a "Ora dobbiamo continuare a eseguire questo comando periodicamente in background."

link

nota come la routine inattiva sta restituendo il tempo dopo il quale il gestore inattivo verrà richiamato di nuovo.

Robert

    
risposta data 17.12.2018 - 01:36
fonte

Leggi altre domande sui tag