Wie prüft man, ob das OS X-Flag "deaktiviert" für Startdienste gesetzt ist?

8

Laut der Manpage für launchctl(Hervorhebung von mir):

   -w Überschreibt den deaktivierten Schlüssel und setzt ihn auf false. In früheren Versionen hat diese Option die Konfigurationsdatei geändert. Jetzt wird der Status des deaktivierten Schlüssels an einer anderen Stelle auf der Festplatte gespeichert.

Da der aktuelle Status des deaktivierten Flags nicht mehr in der .plistDatei selbst festgelegt ist, ist die Überprüfung des DisabledSchlüssels keine genaue Methode mehr, um festzustellen, ob der Dienst beim nächsten Start ausgeführt wird.

Wo ist das "anderswo auf der Festplatte"? Genauer gesagt (und was noch wichtiger ist), wie prüft man, ob dieses Flag gesetzt ist?

Ist es auch möglich, einen Dienst so einzustellen, dass er beim nächsten Start ausgeführt wird, ohne dass er sofort gestartet werden muss (wie bei launchctl load -w /Library/LaunchDaemons/my-service.plist)?

Charles Duffy
quelle

Antworten:

8

Deaktivierungen werden jetzt (ab 10.6.x) in /private/var/db/launchd.db/com.apple.launchd/overrides.plist als Einträge wie folgt gespeichert:

<key>com.apple.AppleFileServer</key>
<dict>
    <key>Disabled</key>
    <true/>
</dict>

Sie können diese Datei analysieren, um festzustellen, welche Startelemente überschrieben werden. Die Datei ist jedoch nur auf Root-Zugriff eingestellt ("-rw ------- 1 Root Wheel"), und es gibt keine Garantie dafür, dass Apple nicht ändert, wie Dinge werden wieder in 10.7 gespeichert ...

Außerdem kenne ich keine Möglichkeit, ein vorhandenes Startelement beim nächsten Start zu laden, ohne es auch sofort zu laden. (Wenn es sich um ein neues Element handelt, kein Problem: Stellen Sie sicher, dass Disabled = false enthalten ist, und legen Sie es in / Library / LaunchDaemons ab.)

Gordon Davisson
quelle
2
es sieht so aus, als würde es sich am 10.11. bewegen :(
Irgendeine
0

Für neue Versionen von macOS haben sich launchctl Syntax und Befehle geändert .

Folgendes wurde unter macOS High Sierra ( 10.13.4) getestet :

launchctl print user/$(id -u)
# For GUI domain (effectively "flat" with login domain)
# See man launchctl for details
launchctl print gui/$(id -u)

Sie können viele Eigenschaften von Diensten auf dem System anzeigen, die Ihrem Benutzer mit Varianten der Befehle launchctl printund zugeordnet sind launchctl list. Suchen Sie beispielsweise nach einem Abschnitt wie dem folgenden, um den Status des deaktivierten Flags anzuzeigen:

disabled services = {
{
    "com.apple.macbuddy.icloudsetup.user" => false
    "com.apple.ManagedClientAgent.enrollagent" => true
    "com.apple.FileStatsAgent" => false
    "com.apple.FolderActionsDispatcher" => true
    "homebrew.mxcl.postgresql" => false
    "com.apple.appleseed.seedusaged.postinstall" => true
    "homebrew.mxcl.mysql" => false
}
TrinitronX
quelle
Es gibt auchlaunchctl print system/{service-name}
wisbucky