Agenti e Demoni: launchd

Inserite qui le vostre guide, trucchi e consigli

Moderatore: ModiMaccanici

Avatar utente
spegahsheen
Stato: Non connesso
Stella nascente
Stella nascente
Avatar utente
Iscritto il: lun, 31 ott 2016 18:20
Messaggi: 895
Località: https://is.gd/axusiw

Top

Definito da Wikipedia come "struttura di gestione servizi unificata e open-source per iniziare, fermare e gestire daemons, applicazioni, processi e scripts. Scritta e progettata da Dave Zarzycki alla Apple, introdotta con Mac OS X Tiger e dotata di licenza Apache"
  • - daemon
    un programma eseguito in background senza richiedere input dell'utente. Per esempio l'esecuzione giornaliera di programmi di manutenzione del sistema o la scansione di un dispositivo quando viene connesso per accertarsi che non sia infetto da malware;
    - daemons e agents
    launchd differenzia tra agenti e demoni. La differenza principale e' che un agente viene eseguito per conto di un utente connesso mentre un demone lavora per conto dell'utente root o per l'utente specificato nella chiave UserName;
    - Job Definitions
    il comportamento del demone/agente viene specificato in un file cosiddetto property list di tipo XML. A seconda di dove e' situato il file verra' trattato come un demone o come un agente.

    Definizioni di job cruciali per il sistema operativo sono in /System/Library/. Non si dovrebbe mai avere necessita' di inserire un demone o un agente in questa directory.
    Le definizioni di produttori terzi rilevanti per tutti gli utenti sono in /Library/, quelle specifiche di ogni utente nella rispettiva directory ~/Library/.

Codice: Seleziona tutto

 +----------------+-------------------------------+----------------------------------------------------+
 |  Type          |  Location                     |  Run on behalf of                                  |
 +----------------+-------------------------------+----------------------------------------------------+
 | User Agents    | ~/Library/LaunchAgents        | Currently logged in user                           |
 | Global Agents  | /Library/LaunchAgents         | Currently logged in user                           |
 | Global Daemons | /Library/LaunchDaemons        | root or the user specified with the key *UserName* |
 | System Agents  | /System/Library/LaunchAgents  | Currently logged in user                           |
 | System Daemons | /System/Library/LaunchDaemons | root or the user specified with the key *UserName* |
 +----------------+-------------------------------+----------------------------------------------------+
Il seguente esempio mostra la completa definizione di un job con tre sole chiavi:
  • - Label: chiave richiesta per qualsiasi definizione di job. Identifica il job e deve essere unica per quella istanza di launchd. Teoricamente e' possibile per un agente avere la stessa Label di un demone, visto che i daemon sono eseguiti dal launchd di root mentre gli agent vengono caricati dal launchd utente, tuttavia rimane sconsigliato dargli lo stesso nome.
    - Program: questa chiave definisce cosa lanciare, nel seguente caso uno script di shell /Users/Me/Scripts/cleanup.sh.
    - RunAtLoad: questa e' una delle chiavi facoltative e specifica quando eseguire il job. In questo caso subito dopo essere sato caricato.

Codice: Seleziona tutto

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
	<dict>
		<key>Label</key>
		<string>com.example.app</string>
		<key>Program</key>
		<string>/Users/Me/Scripts/cleanup.sh</string>
		<key>RunAtLoad</key>
		<true/> 
	</dict>
</plist>
launchd supporta oltre 36 differenti chiavi di configurazione.

Caricamento automatico di Job Definitions
Al boot del sistema il processo launchd di root esamina le directory /System/Library/LaunchDaemons e /Library/LaunchDaemons per trovare definizioni di job e questi vengono caricati a seconda dell'esistenza/valore della chiave Disabled, ma anche in base al contenuto dell'"override database" che ha comunque prevalenza.
Quando un utente si collega identificandosi con username e password un nuovo processo launchd viene iniziato per lui. Questo processo esamina le directory /System/Library/LaunchAgents, /Library/LaunchAgents e ~/Library/LaunchAgents per cercare definizioni di job. Di nuovo questi vengono caricati in dipendenza dell'esistenza/valore della chiave Disabled e dal contenuto del database di override.

Caricamento o avvio
Il fatto di caricare una Job Definition non significa necessariamente avviare il job. Quando cio' debba avvenire e' determinato nella definizione stessa. Infatti launchd avvia immediatamente il job solo se le chiavi RunAtLoad oppure KeepAlive sono state specificate.

fonte: A launchd tutorial
(To be continued...)
Ultima modifica di spegahsheen il dom, 12 nov 2017 22:49, modificato 1 volta in totale.
Per un'insolita congiunzione astrale si manifestò alla mia mente la VERITÀ: trascendente, profonda, rivelata con parole illuminanti. Solo che adesso... non me la ricordo più!

Avatar utente
iStefano
Stato: Non connesso
Genio guastatore
Genio guastatore
Avatar utente
Iscritto il: mer, 30 dic 2009 10:30
Messaggi: 8279
Località: Pomigliano D'Arco (NA)

Top

Contatta:
ottimo...
Lo si poteva inserire in 1° pagina!!!

Scrivo su iMaccanici con TapaTalk per MacBook Air

Avatar utente
faxus
Stato: Non connesso
Pro-Expert 
Pro-Expert 
Avatar utente
Iscritto il: lun, 02 giu 2014 15:12
Messaggi: 30459
Località: Circondato dalle bufale

Top

Contatta:
Molto bene, aspettiamo il seguito...

Avatar utente
spegahsheen
Stato: Non connesso
Stella nascente
Stella nascente
Avatar utente
Iscritto il: lun, 31 ott 2016 18:20
Messaggi: 895
Località: https://is.gd/axusiw

Top

faxus ha scritto:Molto bene, aspettiamo il seguito...
Volentieri, ma mi sono scontrato con un problemino che non so risolvere.
Perché se la mia home directory, e tutto quello che contiene, è posta su un disco che non è il disco di sistema non posso caricare i miei agents?
Ai posteri l'ardua sentenza. :laughing3:
Ultima modifica di spegahsheen il mer, 22 nov 2017 18:42, modificato 1 volta in totale.
Per un'insolita congiunzione astrale si manifestò alla mia mente la VERITÀ: trascendente, profonda, rivelata con parole illuminanti. Solo che adesso... non me la ricordo più!

Avatar utente
faxus
Stato: Non connesso
Pro-Expert 
Pro-Expert 
Avatar utente
Iscritto il: lun, 02 giu 2014 15:12
Messaggi: 30459
Località: Circondato dalle bufale

Top

Contatta:
spegahsheen ha scritto:
faxus ha scritto:Molto bene, aspettiamo il seguito...
Volentieri, ma mi sono scontrato con un problemino che non so risolvere.
Perché, se la mia home directory e tutto quello che contiene, è posta su un disco che non è il disco di sistema non posso caricare i miei agents?
Ai posteri l'ardua sentenza. :laughing3:
Il percorso e il processo che portano alla conoscenza sono descritti nel Libro dei Libri...

https://developer.apple.com/library/con ... dJobs.html" onclick="window.open(this.href);return false;
https://developer.apple.com/library/con ... ories.html" onclick="window.open(this.href);return false;

Avatar utente
spegahsheen
Stato: Non connesso
Stella nascente
Stella nascente
Avatar utente
Iscritto il: lun, 31 ott 2016 18:20
Messaggi: 895
Località: https://is.gd/axusiw

Top

Repetita iuvant
L'esecuzione di un demone è essenzialmente l'esecuzione di un processo in background, viene chiamato agente quando il processo è specifico per ogni singolo utente che ha eseguito il login.
Ci sono quattro modi per lanciare demoni tramite launchd e quello preferito è la cosiddetta modalità on-demand, ma launchd può lanciare demoni la cui esecuzione rimane attiva continuamente, oppure anche avviarli a determinati intervalli di tempo.
launchd è in definitiva esso stesso un demone che fornisce l'infrastruttura per lanciare gli altri demoni quando questi sono necessari. Per i programmi client le porte di servizio dei demoni sono sempre presenti, disponibili a gestire le richieste che i client possono fare, anche se tali demoni non sono in esecuzione. Quando un client invia la richiesta a una porta di servizio associata a un certo demone è launchd che si preoccupa di lanciare quello giusto che la gestirà. Una volta lanciato e servita la richiesta del client, il demone può rimanere in esecuzione oppure chiudersi per liberare la memoria e le risorse che occupa. In tal caso launchd lo richiamerà di nuovo per elaborare eventuali successive richieste.
launchd fornisce una serie di benefit agli sviluppatori, semplificando il coordinamento tra demoni al costo del piccolo ritardo richiesto dalla messa in esecuzione del demone.

Il processo di avvio di launchd
Dopo che il sistema operativo è stato avviato e il kernel è in esecuzione launchd viene eseguito a completamento dell'inizializzazione. Esso esegue i seguenti passi:
  • 1. carica i parametri per ogni demone a livello di sistema dai file property list presenti in /Sytem/Library/LaunchDaemons e /Library/LaunchDaemons;
    2. registra socket (recettori) e descrizioni di file richiesti dai demoni;
    3. lancia quei demoni che devono essere attivi sempre;
    4. non appena arriva la richiesta per un particolare servizio lancia il demone corrispondente e gli passa tale richiesta;
    5. quando il sistema viene spento manda un segnale SIGTERM a tutti i demoni che ha avviato.
Il processo di inizializzazione per gli agenti è simile. Quando un utente fa il login viene avviato un launchd apposito per lui e questo fa quanto segue:
  • 1. per ogni agente on-demand carica i rispettivi parametri dai file property list presenti in /System/Library/LaunchAgents, /Library/LaunchAgents e nella Library/LaunchAgents individuale della home directory dell'utente;
    2. registra i socket e file di descrizione richiesti da tali agenti;
    3. lancia quegli agenti che richiedono di essere in funzione sempre;
    4. quando arriva la richiesta di un particolare servizio avvia il corrispondente agente e gliela passa;
    5. quando l'utente fa il logout manda il segnale SIGTERM a tutti gli agenti che ha richiamato.
Siccome launchd registra socket e file usati dagli agenti e dai demoni prima che questi vengano avviati, questi possono essere avviati in qualunque ordine. Se arriva una richiesta per un demone che non è ancora in esecuzione questa viene sospesa in attesa che il demone richiesto venga attivato e possa rispondere.
Se un demone non riceve richieste per un determinato periodo di tempo può scegliere di chiudersi, rilasciando le risorse che occupa. Quando ciò avviene, launchd annota la chiusura e la necessità di richiamarlo ancora in caso di richieste future dei servizi a questo associati.
Da notare che demoni che si chiudono troppo velocemente dopo il loro lancio possono essere interpretati da launchd come malfunzionanti. Se tale comportamento continua, il demone viene sospeso da launchd che non lo lancerà più in futuro. Per evitare che questo avvenga, il demone deve attendere almeno 10 secondi prima di chiudersi dopo il suo avvio. I programmatori sono avvisati.

fonte:
Per un'insolita congiunzione astrale si manifestò alla mia mente la VERITÀ: trascendente, profonda, rivelata con parole illuminanti. Solo che adesso... non me la ricordo più!

Rispondi

Torna a “Tutorial”

Chi c’è in linea

Visitano il forum: Nessuno e 6 ospiti