launchd scheint StartCalendarInterval auf Yosemite zu ignorieren

9

Ich habe versucht, Homebrew rechtzeitig mit launchd zu aktualisieren. Meine Plist-Datei wird hier präsentiert:

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

Es funktioniert irgendwie: Ich kann launchctl start ms.liu.homebrew.updatemanuell ausführen , um mein Homebrew zu aktualisieren. Launchd führt diesen Dienst jedoch nicht regelmäßig aus: Die letzten Änderungen an der Datei, zu der stdout umleitet, sind zwei Tage her.

Ich habe versucht, Informationen über diesen Service zu erhalten, habe aber nichts erhalten:

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

Es sieht so aus, als hätte ich meinen Dienst nicht erfolgreich geladen. Wie? Ich habe verwendet, launchctl loadaber es scheint, dass es veraltet ist. Manpage empfiehlt stattdessen Bootstrap:

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

Was sollte ich tun? Wie man richtig benutzt launchctl bootstrapund launchctl print?

Ich verwende OS X Yosemite GM Candidate 1 auf MacBookPro mit Retina-Display (2013).

Minsheng Liu
quelle

Antworten:

2

Ich fange gerade erst an, dieses Zeug auszuarbeiten, daher ist diese Antwort vorläufig - aber ich hoffe, sie ist hilfreicher als gar keine Antwort. (Ich hätte es als Kommentar hinterlassen, wenn ich genug Wiederholungen gehabt hätte.)

Befindet sich diese Liste in Ihrem ~/Library/LaunchAgentsVerzeichnis? Es scheint, dass diese in Ihre guiDomain gebootet werden , nicht in Ihre userDomain. So können Sie tun:

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

und es sollte funktionieren. (Macht es?)

Vermutlich ist der Grund, warum Sie es nicht in die userDomäne booten können, dass es bereits in die guiDomäne gebootet ist.

Robin Houston
quelle