Come associo un launchd 2 plist ai suoi domini e target di servizio?

6

Quali sono esattamente questi "domini" e "obiettivi di servizio" e come li associo ai plists per essere utilizzati da launchd?

OS X 10.10 introduce una nuova API launchctl per la gestione di LaunchDaemon e il lancio di plists. I messaggi di log e le pagine man suggeriscono che le chiavi come KeepAlive e RunAtLoad non devono più essere utilizzate e che sottocomandano enable ; %codice%; e bootstrap deve essere usato preferibilmente a kickstart e load -w

Tuttavia non è chiaro dalle pagine man come associare un plist al "dominio" e al "target di servizio" di cui parla e senza il quale questi comandi non possono essere usati con i plists esistenti che apparentemente erano abbastanza sufficienti per OS X 10.9

Ad esempio [aggiornato]: Un plist di base che stiamo cercando di "lanciare"; apparentemente avviato nel dominio "sistema" ma successivamente non riconosciuto in "sistema"

# 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  

Motivazione

Il log di sistema registra che unload -w si lamenta quando usiamo launchctl -w load ... con KeepAlive che Questo servizio è definito per essere costantemente in esecuzione ed è intrinsecamente inefficiente. quindi siamo motivati ad usare il nuova interfaccia.
Non solo, abbiamo problemi significativi con un utilizzo eccessivo del processore che vogliamo controllare fornendo le parole chiave su richiesta appropriate, quindi, di nuovo, siamo motivati a capire come interagire con il nuovo launchd .... non è facile con i documenti come stanno!

    
posta iainH 05.12.2014 - 14:31
fonte

2 risposte

2

Se puoi, presenta un bug su Apple riguardante la documentazione incompleta o non chiara.

launchd sembra avere stato riscritto per OS X 10.10 ed è probabilmente ancora in flusso per alcune versioni minori ancora.

I domini e i target di servizio sembrano essere un'astrazione delle varie cartelle disponibili per i ticket di lavoro avviati. Consentono inoltre un mezzo per i comandi launchctl per il targeting di sessioni specifiche; una funzione che dovrebbe consentire a un comando launchctl di influenzare altre sessioni utente.

Tuttavia, a partire da OS X 10.10.1, la pagina man di launchd.plist non fa menzione delle% deprecate KeepAlive o RunAtLoad .

Apple suggerisce di evitare KeepAlive e RunAtLoad perché l'intenzione è di evitare di avviare mai un processo senza una garanzia di lavoro da fare. Entrambi i tasti rimangono e sono necessari per molte attività.

Il miglior documento di riferimento rimane Nota tecnica TN2083, Demoni e agenti . Questo documento offre una panoramica approfondita del lancio e delle intenzioni di Apple su come implementare i processi in background.

    
risposta data 05.12.2014 - 15:25
fonte
2

Sei vicino, ma non dovresti avere la parte .plist nei comandi enable e kickstart. Ecco un codice che utilizziamo per associarlo a un dominio e un obiettivo di servizio per un utente. $ UID è fondamentalmente il tuo id utente.

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
    
risposta data 05.12.2014 - 23:00
fonte

Leggi altre domande sui tag