Esegui un AppleScript ogni giorno con launchd

1

Sto cercando di eseguire un AppleScript che espelle tutte le unità (dall'eccellente risposta di Monomeeth qui ) ogni giorno alle 8 am usando launchd . Dopo alcune ricerche, ho deciso che il modo migliore per farlo era utilizzare launchd . Tuttavia, sto riscontrando un errore.

Il .plist che ho nella mia directory LaunchAgents dell'utente è il seguente:

<?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>Label</key> 
  <string>local.SkeletonBow.EjectAllDrivesAt8</string> 
  <key>Program</key> 
  <string>/usr/bin/osascript</string> 
  <key>ProgramArguments</key> 
  <array> 
    <string>/usr/local/etc/Daily\ Scripts/Eject\ All.scpt</string>
  </array> 
  <key>StartCalendarInterval</key>
  <dict>
      <key>Hour</key>
      <integer>08</integer>
      <key>Minute</key>
      <integer>00</integer>
  </dict>
</dict> 
</plist> 

L'AppleScript in questione, Eject All.scpt , funziona bene quando lo eseguo con osascript Eject\ All.scpt nella mia shell zsh .

Secondo questo sito , dovrei "caricare il lavoro" in launchctl . L'ho fatto eseguendo, secondo le loro istruzioni, quanto segue:

launchctl load ~/Library/LaunchAgents/local.SkeletonBow.EjectAllDrivesAt8.plist

E poi ho provato a testarlo eseguendo

launchctl start local.SkeletonBow.EjectAllDrivesAt8.plist

Tuttavia, questa particolare azione provoca la visualizzazione di una croce nel terminale, implicando che qualcosa di sbagliato è successo. Suppongo che sia dovuto alla sintassi nel mio file .plist .

    
posta Skeleton Bow 06.07.2018 - 04:17
fonte

1 risposta

1

Non si dovrebbe includere l'estensione .plist quando si avvia direttamente un processo launchtl. Il tuo comando dovrebbe leggere, invece, launchctl start local.SkeletonBow.EjectAllDrivesAt8

Inoltre, le pagine man di launchctl indicano che non si dovrebbero usare gli zeri iniziali quando si imposta l'ora di inizio del Calendario. Il contenuto deve essere <integer>8</integer> e <integer>0</integer> per le chiavi Hour e Minute .

Tieni presente, inoltre, che quando si utilizza CalendarInterval (in contrapposizione a un Intervallo di tempo trascorso ) per impostare un tempo di avvio per un processo, che se la macchina dovrebbe inaspettatamente addormentarsi alle 8:00 e quindi non essere in grado di iniziare il processo, farà avviare il processo al risveglio. Ciò non accade quando l'impostazione del tempo è basata su intervalli.

    
risposta data 06.07.2018 - 06:07
fonte

Leggi altre domande sui tag