2 votos

Ejecutar un AppleScript diariamente con launchd

Estoy tratando de ejecutar un AppleScript que expulsa todas las unidades (de la excelente respuesta de Monomeeth aquí ) todos los días a las 8 de la mañana utilizando launchd . Después de buscar un poco, decidí que la mejor manera de hacerlo era utilizando launchd . Sin embargo, me encuentro con un error.

El .plist que tengo en mi 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 zsh concha.

Según este sitio Debería "cargar el trabajo" en launchctl . Lo hice ejecutando, según 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 el Terminal, lo que implica que algo malo ha sucedido. Supongo que se debe a la sintaxis de mi .plist archivo.

1voto

Mapad Puntos 3033

No hay que incluir el .plist cuando se inicia un proceso launchtl directamente. Su comando debería decir, en cambio, launchctl start local.SkeletonBow.EjectAllDrivesAt8

Además, el launchctl Las páginas del manual indican que no se deben usar ceros a la izquierda cuando se establece la hora de inicio del Calendario. El contenido debe ser <integer>8</integer> y <integer>0</integer> para el Hour y Minute llaves.

También hay que tener en cuenta que cuando se utiliza CalendarioIntervalo (a diferencia de un tiempo transcurrido Intervalo ) para establecer una hora de lanzamiento de un proceso, de modo que si la máquina estuviera inesperadamente dormida a las 8:00AM y por lo tanto no pudiera iniciar el proceso, éste se iniciar el proceso al despertar. Esto no ocurre cuando el ajuste de tiempo está basado en intervalos.

0voto

mouviciel Puntos 36624

Tal vez esta parte sea el problema:

  <key>Program</key>
  <string>/usr/bin/osascript</string>
  <key>ProgramArguments</key>
  <array>
    <string>/usr/local/etc/Daily\ Scripts/Eject\ All.scpt</string>
  </array>

Documentación de Apple no menciona un Program artículo. Cuando lo probé, parecía ser ignorado. Algo así me ha funcionado:

  <key>ProgramArguments</key>
  <array>
    <string>/usr/bin/osascript</string>
    <string>/usr/local/etc/Daily\ Scripts/Eject\ All.scpt</string>
  </array>

Es un poco sorprendente que todo partes tienen que ir en el ProgramArguments matriz. El primero es realmente el programa, ¿no es así, Apple? Eh bien, c'est la vie....

También puedes acortar un poco el código:

  <key>ProgramArguments</key>
  <array>
    <string>osascript</string>
    <string>/usr/local/etc/Daily\ Scripts/Eject\ All.scpt</string>
  </array>

(Supongo que launchd / launchctl mira el PATH para encontrar osascript .)

0 votos

<key>Program</key> está perfectamente bien. <key>ProgramArguments</key> es principalmente para el argumento de la program pero también hay una excepción. Eche un vistazo a la página del manual de launchd.plist . Véase, en particular, Programa <cadena> y ProgramArguments <array de cadenas> . Puede leer el página del manual para command en Terminal tecleando command y, a continuación, haga clic con el botón derecho y seleccione: Abrir la página del hombre .

0 votos

Además, no debería haber ningún barra diagonal inversa escapando de los espacios, sólo, por ejemplo <string>/usr/local/etc/Daily Scripts/Eject All.scpt</string>

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