Come usare Launchd per pianificare l'esecuzione di script su Mac

Mac Script

Automatizzare le attività pianificando script è una capacità potente su cui molti amministratori fanno affidamento ogni giorno. Anche gli utenti Mac regolari possono sfruttare 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 disattivare il 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.

Indice

  • Cos’è Launchd?
  • Daemons e Agent
  • Scrivere Script
  • Descrizioni dei Lavori
  • Caricamento dei lavori in launchctl
  • Domande Frequenti

Cos’è Launchd?

Proprio come un’orchestra richiede un direttore d’orchestra 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 armonia. Essendo il primo processo avviato dal kernel di macOS quando accendi il computer, launchd prende il centro della scena, orchestrando ogni processo, servizio e applicazione successiva, proprio come un direttore d’orchestra che segnala l’inizio di una sinfonia con il primo sollevamento della bacchetta.

Oltre al suo ruolo nell’orchestrazione del sistema, launchd può essere utilizzato per pianificare script, una serie di comandi scritti per eseguire un’attività specifica. Questo viene fatto utilizzando il comando launchctl, che funge da interfaccia per gli utenti per comunicare e dirigere il direttore d’orchestra che è launchd.

Buono a sapersi: stai scaricando torrent? Aumenta l’efficienza scaricando torrent con il Terminale sul tuo Mac.

Daemons e Agent

launchd è talvolta definito un daemon, un programma per computer che viene eseguito come processo in background e tipicamente non è progettato per essere controllato direttamente da un utente. Per quanto riguarda i daemon, launchd è speciale, poiché è il maestro di tutti gli altri daemon di macOS e può decidere quando iniziano e si fermano. Questi daemon subordinati vengono eseguiti sotto l’utente root, quindi possono fare praticamente qualsiasi cosa.

Maxwell Demon Wiki Graphic

Tuttavia, come utente interessato alla pianificazione delle attività, eseguire script sotto l’utente root non è sempre desiderabile o necessario. Qui entrano in gioco gli agent. Gli agent vengono eseguiti per conto di un utente connesso, offrendo un ambiente più ristretto 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 modifica le impostazioni o accede ai file all’interno del tuo account, utilizzeresti un agente.

Suggerimento: hai problemi di compatibilità con alcune delle tue app Mac preferite? Scopri come installare Linux a 32 bit su un vecchio Mac.

Scrivere Script

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

launchd-code-scriptto

I tuoi script launchd possono trovarsi in due posizioni diverse, a seconda che debbano essere eseguiti come agent o daemon:

  • Per quegli script destinati a essere agent, che agiscono per conto dell’utente connesso, dovrebbero essere memorizzati in “~/Library/LaunchAgents.”
  • Al contrario, gli script destinati a funzionare come daemon, operando a livello di sistema indipendentemente dall’utente connesso, appartengono a “/Library/LaunchDaemons.”

Ricorda, gli agent non hanno permessi di root, quindi non possono eseguire attività che richiedono un accesso profondo al sistema. I daemon, d’altra parte, vengono eseguiti con permessi di root e possono gestire attività che influenzano l’intero sistema.

Buono a sapersi: puoi ottenere un controllo più profondo sul tuo Mac abilitando l’Utente Root, permettendoti di accedere all’intero file system.

Descrizioni dei Lavori

launchd-scripts-job-description

Gli script in launchd vengono attivati da definizioni di lavoro, che sono file .plist memorizzati in directory specifiche. Questi file XML danno un nome al lavoro, specificano lo script che dovrebbe essere avviato e indicano quando lo script dovrebbe essere eseguito. Una volta scritto il tuo script, dovrai scrivere e caricare una definizione di lavoro che avvia lo script al momento appropriato. Una definizione di lavoro appare più o meno così:

version="1.0"encoding="UTF-8"?>  
  
version="1.0">  
>  
>Label>  
>local.restart>  
>Program>  
>/Users/user/Scripts/restart.sh>  
>RunAtLoad>  
/>  
>  
>

Modifica come necessario, quindi mettilo in un file di testo con estensione .plist prima di inserirlo nella directory corretta (vedi sopra).

Ci sono alcune parti chiave nella descrizione del lavoro:

  • Label: il nome del lavoro all’interno di launchd. Deve essere unico per ogni lavoro. Questi sono scritti in notazione di dominio inversa, e “local” è un ottimo dominio per agent privati.
  • Program: il percorso completo dello script che questa descrizione del lavoro avvia.
  • RunAtLoad: descrive quando lo script dovrebbe essere eseguito. Ci sono diverse opzioni qui: - RunAtLoad: esegui non appena la definizione del lavoro viene caricata. Viene eseguito solo una volta per caricamento.
  • StartInterval: avvia il lavoro ogni n secondi.
  • StartCalendarInterval: esegui il lavoro a un’ora e una data specifiche.

Suggerimento: hai bisogno di più spazio per quei file di script? Scopri come svuotare la cache sul tuo Mac per liberare rapidamente spazio.

Caricamento dei lavori in launchctl

launchd-scripts-launchctl-list

Una volta creati i tuoi script e salvato il tuo agente nel posto giusto, dovrai caricarlo in launchctl. Questo avverrà automaticamente al successivo accesso.

Per vedere cosa è attualmente in esecuzione in launchctl, puoi usare launchctl list nel terminale. Questa enorme lista può essere filtrata per il tuo script etichettandolo con qualcosa di simile al seguente:

launchctl list |grep local.restart

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

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

Per rimuovere lo script dalla coda di launchctl, usa il comando unload:

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

Caricare un lavoro lo mette nella coda di launchd, e il lavoro verrà eseguito al momento specificato nelle sue condizioni di avvio. Se desideri eseguire uno script immediatamente, indipendentemente da tutto, dovresti usare il comando “start”:

launchctl start local.restart

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

Suggerimento: diventa un utente esperto di Mac utilizzando Raycast o Alfred per avviare rapidamente le tue app preferite.

Domande Frequenti

Come posso controllare se launchd ha avviato uno script?

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

Cosa succede se launchd utilizza troppe risorse di sistema?

Se launchd consuma risorse eccessive, di solito è a causa di uno script o di un lavoro che non funziona correttamente. Dovresti rivedere gli script che hai aggiunto di recente e scaricarli usando launchctl unload /path/to/job.plist.

Qual è la differenza tra cron e launchd?

Sia cron che launchd sono servizi di pianificazione, ma operano in modo diverso. cron è un pianificatore di lavori basato su Unix più vecchio che esegue lavori a orari fissi o intervalli definiti in un file crontab. launchd è il sistema più recente di Apple per macOS che può avviare 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. Questo include script scritti in Python, Perl, Ruby e altri linguaggi.

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