8 votes

Comment associer un launchd 2 plist avec ses cibles de domaine et de service ?

Qu'est-ce que c'est exactement que ces "domain" et "service targets" et comment puis-je les associer à des plists à utiliser par launchd ?

OS X 10.10 introduit une nouvelle launchctl API pour gérer les LaunchDaemons et les listes de lancement. Les messages de journal et les pages de manuel suggèrent que des clés comme KeepAlive y RunAtLoad ne doit plus être utilisé et que les sous-commandes enable ; bootstrap ; et kickstart doit être utilisé de préférence à load -w y unload -w

Cependant, les pages de manuel n'indiquent pas clairement comment associer une liste avec le "domaine" et le "service cible" dont elle parle et sans lesquels ces commandes ne peuvent pas être utilisées avec les listes existantes qui semblaient être suffisantes pour OS X 10.9.

Par exemple [mise à jour] : Une plist de base que nous essayons de "lancer" ; apparemment amorcée dans le domaine "système" mais ensuite non reconnue dans "système".

# pwd
/Library/LaunchDaemons
# cat com.iainhouston.django.plist
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC -//Apple Computer//DTD PLIST 1.0//EN
http://www.apple.com/DTDs/PropertyList-1.0.dtd >
<plist version="1.0">
<dict>
     <key>Label</key>
     <string>com.iainhouston.django</string>
     <key>ProgramArguments</key>
     <array>
          <string>/usr/local/virtualenvs/django.iainhouston.com/bin/gunicorn</string>
          <string>--bind=127.0.0.1:49202</string>
          <string>--workers=2</string>
          <string>superlists.wsgi:application</string>
     </array>
     <key>Disabled</key><false/>
</dict>
</plist> 
# launchctl bootstrap system com.iainhouston.django.plist
/Library/LaunchDaemons/com.iainhouston.django.plist: Service is disabled 
# launchctl enable system/com.iainhouston.django.plist 
# launchctl kickstart system/com.iainhouston.django.plist
Could not find service "com.iainhouston.django.plist" in domain for system  

Motivation

Le journal du système enregistre que launchctl -w load ... se plaint lorsque nous utilisons KeepAlive avec RunAtLoad que Ce service est défini pour fonctionner en permanence et est intrinsèquement inefficace. Nous sommes donc motivés pour utiliser la nouvelle interface.
En plus de cela, nous avons des problèmes significatifs d'utilisation excessive du processeur que nous voulons contrôler en fournissant les mots-clés appropriés à la demande, donc, encore une fois, nous sommes motivés pour comprendre comment interagir avec le nouveau launchd ...., ce qui n'est pas facile avec les docs tels qu'ils sont !

4voto

Graham Miln Points 39606

Si vous le pouvez, déposer un bug auprès d'Apple concernant une documentation incomplète ou peu claire.

launchd semble avoir a été réécrit pour OS X 10.10 et est probablement encore en mouvement pour quelques versions mineures encore.

Les domaines et les cibles de service semblent être une abstraction des différents dossiers disponibles pour les tickets de travail launchd. Ils permettent également aux commandes launchctl de cibler des sessions spécifiques, une fonctionnalité qui devrait permettre à une commande launchctl d'affecter d'autres sessions utilisateur.

Toutefois, à partir de la version 10.10.1 d'OS X, la fonction launchd.plist ne fait aucune mention de la version obsolète KeepAlive o RunAtLoad clés.

Apple suggère d'éviter KeepAlive y RunAtLoad car l'intention est d'éviter de jamais lancer un processus sans garantie de travail à effectuer. Les deux clés demeurent et sont nécessaires pour de nombreuses tâches.

Le meilleur document de référence reste Note technique TN2083, Daemons et agents . Ce document donne un bon aperçu de launchd et des intentions d'Apple concernant la manière dont les processus d'arrière-plan devraient être mis en œuvre.

4voto

David Mitchell Points 1742

Vous êtes proche, mais vous ne devriez pas avoir la partie .plist dans les commandes enable et kickstart. Voici le code que nous utilisons pour l'associer à un domaine et à un service cible pour un utilisateur. $UID est en fait votre identifiant d'utilisateur.

launchctl bootstrap gui/$UID /Library/LaunchAgents/com.yourcompany.yourapp.plist
launchctl enable gui/$UID/com.yourcompany.yourapp
launchctl kickstart -k gui/$UID/com.yourcompany.yourapp

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X