Come utilizzare Launchd per pianificare gli script di esecuzione su Mac

Come utilizzare Launchd per pianificare gli script di esecuzione su Mac

Automatizzare le attività pianificando gli script è una potente funzionalità su cui molti amministratori si affidano ogni giorno. Gli utenti Mac regolari possono anche attingere a questo potere utilizzando launchd, lo strumento preferito di Apple per l’automazione e la gestione delle attività su macOS. Dalla pianificazione di attività semplici come la disattivazione del Wi-Fi a un’ora specifica, all’esecuzione di backup di sistema complessi, launchd su Mac può aiutarti ad automatizzare i tuoi flussi di lavoro, risparmiare tempo e garantire che il tuo sistema funzioni proprio come piace a te.

Cos’è lanciato?

Proprio come un’orchestra richiede un direttore per guidare e armonizzare i diversi strumenti, macOS Ventura , con la sua miriade di processi e servizi, si affida a launchd per garantire che tutto suoni in perfetta sintonia. Come primo processo avviato dal kernel macOS all’avvio del computer, launchd è al centro dell’attenzione, orchestrando ogni processo, servizio e applicazione successivi, proprio come un direttore d’orchestra che segnala l’inizio di una sinfonia con l’iniziale alzata della bacchetta.

Oltre al suo ruolo nell’orchestrazione del sistema, launchd può essere utilizzato per programmare script, una serie di comandi scritti per eseguire un’attività specifica. Questo viene fatto utilizzando il launchctlcomando, che funge da interfaccia per gli utenti per comunicare e dirigere il conduttore che viene lanciato.

Demoni e agenti

launchd è talvolta indicato come demone, un programma per computer che viene eseguito come processo in background e in genere non è progettato per essere controllato direttamente da un utente. Per quanto riguarda i demoni, launchd è speciale, in quanto è il maestro di tutti gli altri demoni macOS e può decidere quando avviarli e interromperli. Questi demoni sottomessi vengono eseguiti sotto l’utente root, quindi possono fare qualsiasi cosa.

Grafico di Maxwell Demon Wiki
Fonte immagine: Wikipedia

Tuttavia, come utente interessato alla pianificazione delle attività, l’esecuzione di script sotto l’utente root non è sempre auspicabile o necessaria. È qui che entrano in gioco gli agenti. Gli agenti vengono eseguiti per conto di un utente che ha effettuato l’accesso, offrendo un ambiente più limitato e garantendo che gli script o le attività vengano eseguiti con le autorizzazioni e le preferenze di quell’utente specifico. Ad esempio, se desideri eseguire uno script che modifichi le impostazioni o acceda ai file all’interno del tuo account, utilizzerai un agente.

Scrivere copioni

Per eseguire agenti o demoni tramite launchd, dovrai scrivere alcuni script. Il linguaggio di scripting più comune è bash. Se vuoi saperne di più sullo scripting bash, puoi consultare la nostra guida per principianti allo scripting bash .

launchd-code-scriptto

I tuoi script launchd possono risiedere in due posizioni diverse, a seconda che siano destinati ad essere eseguiti come agenti o daemon:

  • Per quegli script pensati per essere agenti, che agiscono per conto dell’utente che ha effettuato l’accesso, devono essere archiviati in “~/Library/LaunchAgents”.
  • Al contrario, gli script destinati a funzionare come demoni, a livello di sistema operativo indipendentemente dall’utente che ha effettuato l’accesso, appartengono a “/Library/LaunchDaemons”.

Ricorda che gli agenti non dispongono delle autorizzazioni di root, quindi non possono eseguire attività che richiedono un accesso approfondito al sistema. I demoni, d’altra parte, vengono eseguiti con i permessi di root e possono gestire attività che interessano l’intero sistema.

Descrizione del lavoro

launchd-script-descrizione-del-lavoro

Gli script in launchd vengono attivati ​​dalle definizioni dei lavori, che sono. plist archiviati in directory specifiche. Questi file XML assegnano un nome al processo, specificano lo script da avviare e indicano quando lo script deve essere eseguito. Dopo aver scritto lo script, scriverai e caricherai una definizione del lavoro che avvii lo script al momento opportuno. Una definizione di lavoro è simile a questa:

<?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>local.restart</string>
<key>Program</key>
<string>/Users/user/Scripts/restart.sh</string>
<key>RunAtLoad</key>
<true/>
</dict></plist>

Modificare se necessario, quindi inserirlo in un file di testo con estensione. plist prima di rilasciarlo nella directory corretta (vedi sopra).

Ci sono alcune parti chiave nella descrizione del lavoro:

  • Etichetta: il nome del lavoro all’interno di launchd. Deve essere univoco per ogni lavoro. Questi sono scritti in notazione di dominio inverso e “locale” è un ottimo dominio per agenti privati.
  • Programma: il percorso completo dello script avviato da questa descrizione del lavoro.
  • RunAtLoad: descrive quando eseguire lo script. Ci sono alcune opzioni diverse qui:
    • RunAtLoad: eseguito non appena viene caricata la definizione del lavoro. Viene eseguito solo una volta per carico.
    • StartInterval: avvia il lavoro ogni n secondi. Questo esempio eseguirà il lavoro ogni 7200 secondi o ogni 2 ore.<key>StartInterval</key> <integer>7200</integer>
    • StartCalendarInterval: esegue il processo a un’ora e una data specifiche. Il codice seguente eseguirà il processo ogni giorno alle 9:00.<key>StartCalendarInterval</key> <dict> <key>Hour</key> <integer>9</integer> <key>Minute</key> <integer>0</integer> </dict>

Caricamento dei lavori in launchctl

launchd-script-launchctl-list

Dopo aver creato i tuoi script e salvato il tuo agente nel posto giusto, dovrai caricarlo in launchctl. Ciò avverrà automaticamente agli accessi futuri.

Per vedere cosa è attualmente in esecuzione in laucnhctl, puoi usare launchctl listnel terminale. Questo elenco gigante può essere afferrato per il tuo script etichettandolo con qualcosa di simile al seguente:

launchctl list | grep local.restart

Per caricare uno script, apri Terminale e usa il seguente comando:

launchctl load ~/Library/LaunchAgents/local.restart.plist

launchd-script-launchctl-load

Per rimuovere lo script dalla coda launchctl, utilizzare il unloadcomando:

launchctl unload ~/Library/LaunchAgents/local.restart.plist

launchd-script-launchctl-unload

Il caricamento di un lavoro lo inserisce nella coda di avvio e il lavoro verrà eseguito all’ora specificata nelle condizioni di avvio. Se vuoi eseguire uno script immediatamente, qualunque cosa accada, dovresti usare il comando “start”:

launchctl start local.restart

Questo comando accetta l’etichetta del lavoro e funzionerà solo se il lavoro è già stato caricato in launchctl.

Domande frequenti

Come posso verificare se launchd ha avviato uno script?

Puoi usare il launchctl listcomando nel terminale. Questo visualizzerà tutti i lavori caricati. Per trovare uno script o un lavoro specifico, utilizzare grep, ad esempio, launchctl list | grep your_script_name.

Cosa succede se launchd utilizza troppe risorse di sistema?

Se launchd sta consumando risorse eccessive, di solito è a causa di uno script o di un processo che si comporta in modo anomalo. Dovresti rivedere gli script che hai aggiunto di recente e scaricarli utilizzando launchctl unload /path/to/job.plist.

Qual è la differenza tra cron e launchd?

Sia cron che launchd sono servizi di pianificazione, ma funzionano in modo diverso. cron è un vecchio pianificatore di lavori basato su Unix che esegue i lavori a orari fissi o intervalli definiti in un file crontab. launchd è il nuovo sistema di Apple per macOS che può avviare i lavori in base a vari trigger, non solo al tempo.

Posso usare altri linguaggi di scripting oltre a bash con launchd?

launchd può eseguire qualsiasi script che può essere eseguito dal terminale. Ciò include script scritti in Python, Perl, Ruby e altri linguaggi.

Credito immagine: Pexels . Tutti gli screenshot di David Morelo.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *