Comment vérifier si le drapeau OS X «désactivé» pour les services launchd est défini?

8

Selon la page de manuel de launchctl(c'est moi qui souligne):

   -w Remplace la clé Disabled et la définit sur false. Dans les versions précédentes, cette option modifierait le fichier de configuration. Maintenant, l'état de la clé désactivée est stocké ailleurs sur le disque.

Étant donné que l'état actuel de l'indicateur désactivé n'est plus défini dans le .plistfichier lui-même, la vérification de la Disabledclé n'est plus un moyen précis de dire si le service s'exécutera au prochain démarrage.

Où est ce "ailleurs sur le disque"? Plus précisément (et surtout), comment vérifie-t-on si cet indicateur est défini?

Est-il également possible de définir un service pour qu'il s'exécute au prochain démarrage sans le forcer à démarrer immédiatement (comme avec launchctl load -w /Library/LaunchDaemons/my-service.plist)?

Charles Duffy
la source

Réponses:

8

Les désactivations sont désormais (à partir de 10.6.x) stockées dans /private/var/db/launchd.db/com.apple.launchd/overrides.plist, sous la forme d'entrées telles que:

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

Vous pouvez analyser ce fichier pour voir quels éléments launchd sont remplacés, mais le fichier est défini sur un accès root uniquement ("-rw ------- 1 roue racine"), et il n'y a aucune garantie qu'Apple ne changera pas la façon dont les choses sont à nouveau stockées dans 10.7 ...

De plus, je ne connais aucun moyen d'activer un élément launchd existant à charger au prochain démarrage sans le charger immédiatement. (S'il s'agit d'un nouvel élément, pas de problème: assurez-vous qu'il contient Disabled = false et déposez-le dans / Library / LaunchDaemons.)

Gordon Davisson
la source
2
on dirait qu'il bouge le 10.11 :( une idée de la réponse mise à jour le 10.11?
Peter Lapisu
0

Pour les nouvelles versions de macOS, la launchctl syntaxe et les commandes ont changé .

Les éléments suivants ont été testés sur 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)

Vous pouvez afficher de nombreuses propriétés de services sur le système attaché à votre utilisateur avec des variantes des commandes launchctl printet launchctl list. Par exemple, pour voir l'état de l'indicateur désactivé, recherchez une section comme celle-ci:

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
la source
il y a aussilaunchctl print system/{service-name}
wisbucky