2 votes

Exécuter un AppleScript quotidiennement avec launchd

J'essaie d'exécuter un AppleScript qui éjecte tous les lecteurs (d'après l'excellente réponse de Monomeeth ici ) tous les jours à 8 heures en utilisant launchd . Après quelques recherches, j'ai décidé que la meilleure façon de faire était d'utiliser launchd . Cependant, je me heurte à une erreur.

El .plist que j'ai dans mon utilisateur LaunchAgents est le suivant :

<?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 en question, Eject All.scpt fonctionne bien lorsque je l'exécute avec osascript Eject\ All.scpt dans mon zsh coquille.

Selon ce site je devrais "charger le travail" dans launchctl . J'ai fait cela en exécutant, selon leurs instructions, ce qui suit :

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

Puis j'ai essayé de le tester en exécutant

launchctl start local.SkeletonBow.EjectAllDrivesAt8.plist

Cependant, cette action particulière entraîne l'affichage d'une croix dans le terminal, ce qui implique que quelque chose de mal s'est produit. Je suppose que cela est dû à la syntaxe de mon fichier .plist fichier.

1voto

Mapad Points 3033

On ne devrait pas inclure le .plist lors du lancement direct d'un processus de lancement. Votre commande devrait se lire, à la place, launchctl start local.SkeletonBow.EjectAllDrivesAt8

En outre, le launchctl Les pages du manuel indiquent qu'il ne faut pas utiliser de zéros en tête lors de la définition de l'heure de début du calendrier. Le contenu devrait être <integer>8</integer> y <integer>0</integer> pour le Hour y Minute clés.

N'oubliez pas non plus que lorsque vous utilisez CalendarInterval (par opposition à un temps écoulé Intervalle ) pour fixer une heure de lancement d'un processus, de sorte que si la machine devait inopinément être endormie à 8h00 et donc incapable de lancer le processus, elle sera initier le processus au réveil. Cela ne se produit pas lorsque le réglage du temps est basé sur l'intervalle.

0voto

mouviciel Points 36624

Peut-être que cette partie est le problème :

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

La documentation d'Apple ne mentionne pas de Program article. Lorsque je l'ai testé, il semblait être ignoré. Quelque chose comme ça a fonctionné pour moi :

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

C'est un peu surprenant que tous les pièces doivent aller dans le ProgramArguments réseau. Le premier est vraiment le programme, n'est-ce pas, Apple ? Eh bien, c'est la vie....

Vous pouvez également raccourcir un peu le code :

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

(Je suppose que launchd / launchctl regarde le PATH pour trouver osascript .)

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X