Come si controlla se è impostato il flag "disabilitato" di OS X per i servizi di avvio?


8

Secondo la pagina man di launchctl(enfasi sulla mia):

   -w Sostituisce la chiave disabilitata e la imposta su false. Nelle versioni precedenti, questa opzione avrebbe modificato il file di configurazione. Ora lo stato della chiave disabilitata è memorizzato altrove sul disco.

Poiché lo stato corrente del flag disabilitato non è più impostato nel .plistfile stesso, il controllo della Disabledchiave non è più un modo preciso per stabilire se il servizio verrà eseguito al prossimo avvio.

Dov'è questo "altrove su disco"? Più precisamente (e soprattutto), come si controlla se questo flag è impostato?

Inoltre, è possibile impostare un servizio da eseguire al prossimo avvio senza forzarlo ad avviarsi immediatamente (come con launchctl load -w /Library/LaunchDaemons/my-service.plist)?

Risposte:


8

Le disabilitazioni sono ora (a partire dal 10.6.x) memorizzate in /private/var/db/launchd.db/com.apple.launchd/overrides.plist, come voci come:

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

Puoi analizzare questo file per vedere quali elementi di avvio vengono sostituiti, ma il file è impostato solo per l'accesso root ("-rw ------- 1 root wheel") e non c'è garanzia che Apple non cambierà il modo le cose vengono nuovamente memorizzate in 10.7 ...

Inoltre, non conosco alcun modo per abilitare un elemento launchd esistente da caricare al prossimo avvio senza caricarlo immediatamente. (Se si tratta di un nuovo elemento, nessun problema: assicurati che abbia disabilitato = false in esso e rilascialo in / Library / LaunchDaemons.)


2
sembra muoversi il 10.11 :( qualche idea per la risposta aggiornata il 10.11?
Peter Lapisu,

0

Per le nuove versioni di macOS, la launchctl sintassi e i comandi sono cambiati .

Quanto segue è stato testato su macOS High Sierra ( 10.13.4):

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

È possibile visualizzare molte proprietà dei servizi sul sistema collegato all'utente con varianti dei comandi launchctl printe launchctl list. Ad esempio, per vedere lo stato del flag disabilitato, cerca una sezione come questa:

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
}

c'è anchelaunchctl print system/{service-name}
wisbucky il
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.