Ejecutar un AppleScript diariamente con launchd

0

Estoy intentando ejecutar un AppleScript que expulsa todas las unidades (de la excelente respuesta de Monomeeth aquí ) diariamente a las 8 am usando launchd . Después de algunas búsquedas, decidí que la mejor manera de hacerlo era usando launchd . Sin embargo, estoy corriendo en un error.

El .plist que tengo en mi directorio de usuario LaunchAgents es el siguiente:

<?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> 

El AppleScript en cuestión, Eject All.scpt , funciona bien cuando lo ejecuto con osascript Eject\ All.scpt en mi shell zsh .

Según este sitio , debería "cargar el trabajo" en launchctl . Hice esto ejecutando, de acuerdo con sus instrucciones, lo siguiente:

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

Y luego trató de probarlo ejecutando

launchctl start local.SkeletonBow.EjectAllDrivesAt8.plist

Sin embargo, esta acción en particular hace que se muestre una cruz en la Terminal, lo que implica que algo malo ha ocurrido. Supongo que se debe a la sintaxis de mi archivo .plist .

    
pregunta Skeleton Bow 06.07.2018 - 04:17

1 respuesta

0

Uno no debe incluir la extensión .plist al iniciar un proceso de inicio directamente. Su comando debería leer, en su lugar, launchctl start local.SkeletonBow.EjectAllDrivesAt8

Además, las páginas de manual launchctl indican que no se deben usar ceros iniciales al configurar la hora de inicio del calendario. El contenido debe ser <integer>8</integer> y <integer>0</integer> para las claves Hour y Minute .

Tenga en cuenta, también, que al usar CalendarInterval (en lugar de un Interval ) para establecer el tiempo de inicio de un proceso, eso si la máquina inesperadamente debería estar dormido a las 8:00 AM y, por lo tanto, no poder iniciar el proceso, iniciará el proceso al despertar. Eso no sucede cuando el ajuste de tiempo se basa en intervalos.

    
respondido por el Doc G. 06.07.2018 - 06:07

Lea otras preguntas en las etiquetas