- - 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* |
+----------------+-------------------------------+----------------------------------------------------+
- - 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>
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...)