launchd semble ignorer StartCalendarInterval sur Yosemite

9

J'ai essayé de mettre à jour Homebrew à temps avec launchd. Mon fichier plist est présenté ici:

<?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>ms.liu.homebrew.update</string>
  <key>UserName</key>
  <string>LiuMS</string>
  <key>ProcessType</key>
  <string>Background</string>
  <key>EnvironmentVariables</key>
  <key>ProgramArguments</key>
  <array>
    <string>/usr/local/bin/brew</string>
    <string>update</string>
  </array>
  <key>StartCalendarInterval</key>
  <dict>
    <key>Hour</key>
    <integer>20</integer>
    <key>Minute</key>
    <integer>0</integer>
  </dict>
  <key>StandardOutPath</key>
  <string>/usr/local/logs/ms.liu.homebrew.update.out</string>
  <key>StandardErrorPath</key>
  <string>/usr/local/logs/ms.liu.homebrew.update.err</string>
</dict>
</plist>

Cela fonctionne d'une manière ou d'une autre: je peux exécuter launchctl start ms.liu.homebrew.updatemanuellement pour mettre à jour mon Homebrew. Cependant, launchd n'exécute pas ce service périodiquement: les dernières modifications apportées au fichier vers lequel stdout est redirigé il y a deux jours.

J'ai essayé d'obtenir des informations sur ce service mais je n'ai rien obtenu:

> launchctl print user/%MyPID%/ms.liu.homebrew.update`` 
Could not find service "ms.liu.homebrew.update" in domain for uid: %MyPID%

Il semble que je n'ai pas réussi à charger mon service. Comment? Je l'ai utilisé launchctl loadmais il semble qu'il soit déprécié. La page de manuel recommande plutôt le bootstrap:

> launchctl bootstrap user/%MyPID% %Path-to-plist%
> %Path-to-plist%: Service cannot load in requested session

Que devrais-je faire? Comment utiliser correctement launchctl bootstrapet launchctl print?

J'utilise OS X Yosemite GM Candidate 1 sur MacBookPro avec écran Retina (2013).

Minsheng Liu
la source

Réponses:

2

Je commence à peine à travailler sur ces choses, donc cette réponse est provisoire - mais j'espère que c'est plus utile que pas de réponse du tout. (Je l'aurais laissé en commentaire si j'avais assez de représentants.)

Cette liste est-elle dans votre ~/Library/LaunchAgentsannuaire? Il semble que ceux-ci soient démarrés dans votre guidomaine, pas dans votre userdomaine. Vous pouvez donc faire:

launchctl print gui/%UID%/ms.liu.homebrew.update

et ça devrait marcher. (Est-ce que c'est?)

Vraisemblablement, la raison pour laquelle vous ne pouvez pas l'amorcer dans le userdomaine est qu'il est déjà amorcé dans le guidomaine.

Robin Houston
la source