- I LaunchAgent dipendono dai LaunchDaemon dell'utente e del sistema; entrambi sono gestiti dai file launchd e .plist in percorsi specifici.
- macOS 13+ introduce SMAppService, notifiche e profili XML per approvare in modo trasparente gli elementi in background.
- Diagnosticare con sfltool, launchctl e i registri da backgroundtaskmanagement; controlla gli elementi nelle Impostazioni di sistema.
- Applicare le autorizzazioni corrette, utilizzare KeepAlive con SuccessfulExit/NetworkState ed evitare di toccare /System/Library per la massima stabilità.
In macOS, gran parte della magia avviene dietro le quinte grazie ai servizi che si avviano senza che tu te ne accorga e all'associazione Agenti di lancio/Demoni di lancio è il cuore di questa automazione. Se ti sei mai chiesto come realizzare un copione Boot da solo, mantenere attiva un'app critica o controllare quali app vengono caricate, ecco la guida pratica che stavi cercando.
Noi di Macos 13, Apple ha cambiato le regole del gioco con una nuova struttura nei pacchetti di applicazioni e il quadro di SMAppService, che fornisce maggiore trasparenza all'utente e una gestione coerente degli elementi di accesso, agenti di lancio y avviare demoniInoltre, sono disponibili miglioramenti per gli amministratori con profili di configurazione e strumenti diagnostici che è consigliabile padroneggiare.
Cosa sono launchd, LaunchAgents e LaunchDaemons
Il processo launchd Si avvia subito dopo il kernel (è uno dei primi ad avviarsi, solitamente con PID 1) ed è ciò che avvia, controlla e monitora gli altri servizi. Normalmente consuma poche risorse, ma se un giorno si nota che è in esecuzione in Activity Monitor, un riavvio di solito lo riporta alla normalità.
I LaunchDaemons Vengono eseguiti all'avvio del sistema e lo fanno nel contesto di radice; non dipendono dall'accesso di nessuno e non possono interagire con l'interfaccia grafica. Sono perfetti per attività di sistema, processi persistenti e servizi che devono essere disponibili anche quando un utente non è connesso.
I LaunchAgents Vengono caricati quando un utente specifico effettua l'accesso e può interagire con l'interfaccia (barra dei menu, notifiche, finestre, ecc.). Sono ideali per utilità utente, procedure guidate e processi delle app che richiedono un accesso.
In entrambi i casi la configurazione risiede nei file .plist Con chiavi e valori che indicano cosa eseguire, quando e come. Questi file .plist sono gestiti da launchd e risiedono in posizioni specifiche sul sistema, quindi sapere dove vanno, con quali permessi e come caricarli è fondamentale.
Struttura e posizione dei file .plist
macOS organizza i file .plist come segue: a livello di sistema in /Sistema/Libreria/LaunchAgents y /Sistema/Libreria/LaunchDaemons, a livello globale in / Library / LaunchAgents y / Library / LaunchDaemons, e a livello utente in ~ / Library / LaunchAgentsLa regola sana è installare il proprio in /Library o in ~/Library, e Non toccare l'albero /Sistema/Libreria.
I file .plist sono file XML con chiavi come etichetta (identificatore del servizio), Programma o Argomenti del programma (cosa eseguire), Esegui al caricamento (inizia non appena carica) o Mantieni vivo (retry/live policy). Puoi visualizzarli con un editor di testo, ma modificali con attenzione e tieni sempre presente la funzione di ogni tasto.
Affinché launchd accetti un file .plist, è necessario rispettare la proprietà e i permessi. Come amministratore: sudo chown root:wheel /Library/LaunchAgents/mi.servicio.plist y sudo chmod 644 /Library/LaunchAgents/mi.servicio.plistQueste impostazioni assicurano che radice può scrivere, il gruppo ruota e altri possono leggerlo e launchd considera attendibile il file.
Una volta installato, si carica con sudo launchctl load -w /Library/LaunchAgents/mi.servicio.plist o la sua controparte in /Library/LaunchDaemonsPer rimuoverlo, puoi usare launchctl remove com.ejemplo.mi-servicio (dove l'etichetta corrisponde al valore di etichetta).
Nuove funzionalità da macOS 13: SMAppService e trasparenza utente
Apple ha introdotto una struttura di bundle di app che mantiene gli eseguibili helper all'interno dell'app stessa e li gestisce con SMAppServiceCiò consente la registrazione e il monitoraggio elementi di login, agenti di avvio e demoni di avvio come eseguibili ausiliari, senza distribuirli nel sistema e con maggiore visibilità per l'utente.
Quando questi elementi vengono distribuiti tramite MDM o programmi di installazione, macOS 13+ visualizza un notifica di installazione dell'elemento gestito per segnalare e consentire la revisione nelle Impostazioni di sistema. La prima corrispondenza con una regola genera una notifica; le corrispondenze successive nello stesso giorno non generano più notifiche ripetute.
Se l'utente posticipa Se la notifica è disabilitata, macOS silenzia ulteriori notifiche di questo tipo per il periodo di tempo selezionato (1 giorno o 1 settimana). Mentre la notifica è visibile, non vengono visualizzate ulteriori installazioni; se viene ignorata, le installazioni successive riprenderanno a ricevere notifiche. Questa politica riduce il rumore e garantisce al contempo il controllo.
Visibilità e diagnostica: tutto ciò che devi controllare
Per vedere cosa viene registrato con il nuovo frame, apri Impostazioni di sistema > Generali > Elementi di avvioQui vedrai gli elementi di login e di sfondo; il pulsante delle informazioni mostra l'eseguibile in fase di avvio e i dettagli associati.
In linea comandi, hai diversi usi. Con launchctl list Ottieni tutti i servizi in esecuzione. Per il framework delle attività in background, usa sfltool dumpbtm e controllare lo stato attuale (include il UUID del carico utile di servicemanagement). Se è necessario ripulire lo stato tra i test, eseguire sfltool resetbtm e, per l'igiene, riavviare el Mac prima di riprovare.
Per i registri in tempo reale, filtrare su consolle dal sottosistema e dalla categoria appropriati, oppure avviare in terminal: log stream --debug --info --predicate "subsystem == 'com.apple.backgroundtaskmanagement' AND category == 'mcx'"In questo modo, potrai visualizzare utili tracce di aggiunta, eliminazione e gestione degli elementi.
Se hai accesso ad AppleSeed per IT, lo strumento Utilità di valutazione per Mac 4.3.0+ genera report dettagliati in linea con ciò che genera sfltool dumpbtme consente di esportare risultati delimitati per ulteriori analisi o correlazioni con l'inventario.
Profili XML per la gestione delle attività in background
Le organizzazioni possono approvare automaticamente gli elementi in background utilizzando un Profilo di configurazione XMLIl contenuto è un insieme di regole (dizionari); quando un elemento corrisponde, viene approvato. Esistono diversi tipi di corrispondenza che vale la pena padroneggiare.
- Identificatore del pacchetto (ID bundle) con corrispondenza esatta per un'app specifica.
- Prefisso identificativo del bundle per autorizzare famiglie di app con un prefisso.
- Identificatore di squadra dallo sviluppatore (firma del codice) con corrispondenza esatta.
- etichetta del servizio (chiave
Labeldal file launchd .plist) con corrispondenza esatta. - Prefisso etichetta per approvare i tag che iniziano con un determinato schema.
Con questo approccio, gli amministratori garantiscono che gli elementi legittimi siano attivati senza attriti, il tutto con tracciabilità e nel rispetto delle policy aziendali. Se gestisci flotte, questo ti fa risparmiare supporto e previene inutili tempi di inattività.
Sicurezza, malware e poteri di sistema
Molti programmi di installazione aggiungono file .plist che vengono dimenticati quando l'app originale viene disinstallata. Questi residui possono riavviare processi che pensavi fossero stati eliminati. Inoltre, il malware abusa di LaunchAgents per persistere, raccogliere dati e comunicare con server remoti.
Apple gestisce un file di attribuzione con binari helper comuni che aiutano a identificare chi è chi: /System/Library/PrivateFrameworks/BackgroundTaskManagement.framework/Versions/A/Resources/attributions.plistConsultandolo puoi avere indizi su attributo eseguibili nelle app padre durante l'analisi forense o la pulizia.
Come livello di sorveglianza "artigianale", puoi attivare Azioni cartella su percorsi sensibili: /Library/LaunchAgents, /Library/LaunchDaemons, /System/Library/LaunchAgents, /System/Library/LaunchDaemons y ~/Library/LaunchAgentsIn questo modo, verrai avvisato quando viene visualizzato un nuovo file .plist, consentendoti di esaminarlo al volo.
Creazione di LaunchAgent e LaunchDaemon personalizzati
L'idea di base è semplice: scrivere un .plist con l' etichetta (per esempio., com.ejemplo.miscript), definire Programma o Argomenti del programma con il percorso esatto dell'eseguibile/script, imposta le chiavi come Esegui al caricamento e, se applicabile, Mantieni vivoe posizionarlo nella cartella appropriata.
Se l'attività deve essere eseguita prima dell'accesso e senza interfaccia utente, posizionarla in /Library/LaunchDaemonsSe dipendi da un utente e/o interagisci con l'interfaccia, usa /Library/LaunchAgents o ~/Library/LaunchAgents (solo per quell'utente). Ricordati di applicare proprietà e permessi correggere prima del caricamento.
Per attivare immediatamente: sudo launchctl load -w /Library/LaunchDaemons/com.ejemplo.miscript.plistPer interrompere e scaricare: sudo launchctl unload -w /Library/LaunchDaemons/com.ejemplo.miscript.plist o launchctl remove com.ejemplo.miscript. Assicurarsi che il esistono percorsi per i binari e sono eseguibili.
Consiglio pratico: testare sempre prima ~ / Library / LaunchAgents con il tuo utente, controlla i log e il comportamento e solo allora promuovi a /Library. Evita di modificare /System/Library/…; oltre ad essere una cattiva pratica, il sistema protetto (SIP) lo impedisce per motivi di sicurezza.
Politiche KeepAlive e casi d'uso reali
Se hai bisogno di un processo per rimanere sempre al top, la chiave Mantieni vivo ti consente granularità. Puoi mettere <true/> per nuovi tentativi incondizionati oppure utilizzare un dizionario con condizioni per un controllo preciso.
Un modello molto utile combina Mantieni vivo con Uscita di successoQuando definisci SuccessfulExit = false, launchd riproverà se il processo esce con un codice diverso da 0 (crash, errore), ma se l'utente lo chiude "in modo pulito" (uscita 0), no lo riavvierà. In questo modo eviterai qualsiasi problema quando aggiorni un'app o spegni il Mac.
Un altro approccio comune è Stato della rete: se lo imposti su true All'interno di KeepAlive, il riavvio rispetterà la "disponibilità di rete" (il dispositivo ha un indirizzo IP). Nota: la presenza di rete non implica sempre l'accesso a Internet; launchd verifica solo la connettività di base, non la risposta del tuo ISP.
Se si prevede di mantenere attiva un'app di interfaccia (ad esempio, un'utilità della barra dei menu), creare un Agente di lancio con il suo pacchetto binario effettivo: ad esempio, /Applications/MiApp.app/Contents/MacOS/MiAppEvita percorsi verso alias o verso l'app "iconica" e punta all'eseguibile all'interno del pacchetto.
Negli ambienti non presidiati (chioschi, schermi informativi, server con sessione persistente), queste policy possono fare la differenza per i tuoi strumenti non cadere e se lo fanno, si reggono in piedi da soli, senza l'intervento umano.
Vecchie alternative e pratiche da evitare
Apple lasciata da parte cron y LoginHooks come metodi consigliati per avviare le attività; il percorso ufficiale è launchd. C'erano anche elementi di avvio nelle versioni precedenti (cartelle in System e Global Library), ma non dovrebbe essere utilizzato per le nuove implementazioni attuali.
Modifica manualmente gli alberi di sistema (/System/Library/LaunchDaemons) potrebbe finire su un Mac che non si avviaNon correre rischi: se devi avviare il sistema molto presto, usa /Library/LaunchDaemons con la configurazione e le autorizzazioni corrette e lascia intatti i componenti del sistema.
Monitoraggio delle prestazioni e risoluzione dei problemi
Se noti che il tuo Mac è lento, apri Monitoraggio delle attività e ordina per CPU. Normalmente launchd non appare in testa; se è costantemente al 30-40%, riavviare il sistema e controllare di nuovo. Se persiste, elencare i servizi con launchctl list ed eliminare i sospettati.
Per verificare quali elementi sono registrati con il nuovo framework, sfltool dumpbtm è oro: cattura la tua uscita e salvalo nel tuo report di supporto. Tra un test e l'altro, sfltool resetbtm Ti lascia con una tabula rasa; ricordati di riavviare per evitare stati intermedi.
I registri sono i tuoi amici: con log stream --debug --info --predicate "subsystem == 'com.apple.backgroundtaskmanagement' AND category == 'mcx'" Otterrai dettagli precisi su alti, bassi e cambiamenti. Abbinalo a consolle filtrando in base agli stessi campi se si preferisce un'interfaccia grafica.
Gestione su larga scala con MDM e best practice
Nelle distribuzioni gestite, creare un Profilo XML che descrive le regole di approvazione (per ID bundle, prefisso, ID team, tag o prefisso etichetta). In questo modo, quando un'app registra il suo helper, macOS la approverà automaticamente e l'utente visualizzerà una notifica controllata.
Prova i tuoi flussi standard (installazione, aggiornamento, disinstallazione) e convalida il risultato con Gestione dichiarativa dei dispositivi Su macOS 14+ (report sullo stato) e con gli strumenti sopra menzionati. Raccogliere feedback da utenti e fornitori per adattare le app al nuovo framework.
Documentare la politica interna: cosa è autorizzato, in base a quali criteri, chi la esamina, come viene verificata e cosa fare se un elemento inizia a consumare risorse. Con questa igiene, si evitano sorprese e si migliora la sicurezza e la stabilità della flotta.
Suggerimenti per la pulizia e il monitoraggio continuo
Se dopo aver disinstallato qualcosa l'elemento riappare all'avvio, cerca il suo .plist per nome in /Library/LaunchAgents, /Library/LaunchDaemons y ~/Library/LaunchAgents. Elimina il file e scarica il servizio con launchctl remove usando il tuo etichetta.
Per aumentare la tua visibilità, abilita questi Azioni cartella Commento: Ogni volta che un nuovo file .plist appare in percorsi sensibili, riceverai una notifica e potrai intervenire immediatamente. È una misura semplice che ti risparmia grattacapi.
Tieni presente che gli agenti sono per utente e i daemon sono a livello di sistema. Su macchine condivise, potresti voler preferire gli agenti in ~/Library/LaunchAgents per non influenzare altri profili, a meno che non si tratti di un compito interaziendale.
Se automatizzi un'app in modo che rimanga sempre aperta, ricorda che può bloccare arresto o riavvio quando riavviato quando il sistema tenta di spegnersi. Prima di aggiornare o riavviare, disabilitare il servizio con launchctl remove oppure scaricare il file .plist e riattivarlo in seguito.
Infine, non dimenticare di controllare periodicamente Impostazioni di sistema > Generali > Elementi di avvio e la sezione degli elementi di sfondo. Questo è il modo più rapido per individuare i "clandestini" che si intrufolano con installatori distratti.
Dominare LaunchAgents e LaunchDaemons Ti dà il controllo: sai cosa inizia, quando e perché; puoi approvare azioni legittime con i profili, diagnosticare con sfltool e i log e rafforzare la sicurezza grazie alla trasparenza fornita da SMAppService in macOS 13+. Con poche regole chiare (percorsi corretti, permessi, etichette coerenti e uso corretto di KeepAlive), avrai servizi stabili, utenti informati e un sistema più prevedibile, senza dover lottare con metodi obsoleti.
Scrittore appassionato del mondo dei byte e della tecnologia in generale. Adoro condividere le mie conoscenze attraverso la scrittura, ed è quello che farò in questo blog, mostrarti tutte le cose più interessanti su gadget, software, hardware, tendenze tecnologiche e altro ancora. Il mio obiettivo è aiutarti a navigare nel mondo digitale in modo semplice e divertente.
