launchd parece ignorar StartCalendarInterval en Yosemite

9

Traté de actualizar Homebrew a tiempo con launchd. Mi archivo plist se presenta aquí:

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

Funciona de alguna manera: puedo ejecutarlo launchctl start ms.liu.homebrew.updatemanualmente para actualizar mi Homebrew. Sin embargo, launchd no ejecuta este servicio periódicamente: los últimos cambios en el archivo al que redirecciona stdout es hace dos días.

Traté de obtener información sobre este servicio pero no obtuve nada:

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

Parece que no he cargado correctamente mi servicio. ¿Cómo? Solía launchctl loadpero parece que ha quedado en desuso. La página del manual recomienda bootstrap en su lugar:

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

¿Qué tengo que hacer? ¿Cómo usar correctamente launchctl bootstrapy launchctl print?

Estoy ejecutando OS X Yosemite GM Candidate 1 en MacBookPro con pantalla Retina (2013).

Minsheng Liu
fuente

Respuestas:

2

Recién estoy empezando a resolver esto, por lo que esta respuesta es tentativa, pero espero que sea más útil que ninguna respuesta. (Lo habría dejado como comentario si tuviera suficiente representante).

¿Está esto en su ~/Library/LaunchAgentsdirectorio? Parece que estos están integrados en su guidominio, no en su userdominio. Entonces puedes hacer:

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

y debería funcionar (¿Lo hace?)

Presumiblemente, la razón por la que no puede iniciarlo en el userdominio es que ya está inicializado en el guidominio.

Robin Houston
fuente