Launchd: eseguire operazioni automaticamente proprio quando serve a voi

Prima premessa: quello che segue vale solo su Leopard.
Seconda premessa: non è un tutorial, ma solo la presentazione di alcuni strumenti molto interessanti e potenti, sta a voi poi documentarvi se vi interessa.Dal titolo non si capisce, ma quello che sto per raccontarvi potrebbe migliorare la vostra vita informatica, dandovi qualche spunto interessante.
Si tratta di imparare a maneggiare un potentissimo “demone” di sistema: launcd.
Utilizzando questo componente di sistema potremo eseguire operazioni automaticamente ad intervalli prefissati, oppure ogniqualvolta si monta un disco (anche virtuale) o in connessione con gli eventi riguardanti una specifica cartella.

Le basi: ovvero un po’ (pochissimo) di Terminale duro e puro
Che cos’è launchd? Launchd è un componente di Mac OS X, introdotto in Tiger e perfezionato in Leopard che si occupa di lanciare script o applicazioni secondo le regole contenute in un file di preferenze, caratterizzato dall’estensione .plist. Questi file di preferenze, che possono essere creati anche con il più semplice degli editor di testo, vanno compilati seguendo particolari regole e inserendo chiavi specifiche, seguendo quanto riportato nel manuale preparato da Apple. Ad esempio bisogna specificare un nome univoco, quale applicazione o script lanciare, se lanciarla periodicamente o in associazione agli eventi relativi ad una cartella ecc…
I file di preferenze, anche detti “agenti”possono essere salvati in questi percorsi

  • ~/Library/LaunchAgents: agenti riguardanti l’utente, forniti dall’utente
  • /Library/LaunchAgents: agenti riguardanti l’utente, forniti dall’amministratore
  • /Library/LaunchDaemons: demoni di sistema forniti dall’aministratore
  • /System/Library/LaunchAgents: agenti Mac OS X per l’utente
  • /System/Library/LaunchDaemons: demoni Mac OS X di sistema

A noi interessa particolarmente il primo percorso, quello relativo all’utente. Una volta salvato il file di preferenze nel posto giusto, bisogna caricarlo nella lista degli agenti da passare a launchd. Per questo si usa il comando launchctl.
Con il comando launchctl load /percorso_file si carica il file preferenze nell’elenco degli agenti, con launchctl unload /percorso_file si toglie dalla lista degli agenti. Utilizzando il parametro opzionale -w si rende l’agente attivo o inattivo. Con launchctl list si ottiene una lista di tutti gli agenti caricati.
Bestia che casino… e invece no!

Lingon: ovvero come non sporcarsi le mani!
C’è un modo per evitare di doversi sporcare le mani con file di preferenze e terminale? Sì. Si chiama Lingon e permette di compilare e attivare/disattivare i file di preferenze con molta facilità. Aprite Lingon e create un nuovo “My Agents”, vi troverete di fronte ad una finestra simile:

L’utilizzo

è molto semplice
Nell’area 1 specificate il nome dell’agente, ovvero il nome del file di preferenze: come vedete, sotto il campo apposito, è fornito un esempio di formattazione.
Nella 2 specificate cosa far lanciare a launchd. Si può specificare un comando del Terminale, uno script bash eseguibile o un’applicazione. Le applicazioni possono essere create anche utilizzando Automator o Script Editor, ovvero usando il linguaggio Applescript (in questo caso salvate lo script come applicazione, altrimenti non funziona).
Nell’area 3 si specifica quando far partire l’agente:

  • sempre
  • solo al login/avvio

ogni volta che viene montato un volume

  • ad una data specifica
  • ogni tot secondi
  • quando viene modificato un file specificato
  • quando viene inserito un file in una cartella specificata

 

Compilate secondo le vostre esigenze e salvate, assicurandovi che sia presente la spunta su “Enable” in alto a destra. Lingon vi dice che dovete fare logout e poi login affinché launchd carichi il vostro agente, ma se siete furbi potete usare il comando launchctl come spiegato sopra.

Per cosa usarlo?
Beh, questo dovete deciderlo voi. Io ad esempio lo uso per eseguire questo script (opportunamente modificato per partire solo quando c’è un particolare volume montato) ogni volta che inserisco la mia pendrive USB.
Si possono creare script per

spostare i file con una data estensione quando vengono inseriti in una cartella specificata: ad esempio per smistare i video scaricati, o i file PDF e così via.
Oppure ancora per scattare una foto con l’iSight ogni tot secondi, utilizzando questo tool da linea di comando per poi caricare tutto su dropbox, come vi ho suggerito qui.
Insomma, potrete usare launchd per eseguire automaticamente le più disparate azioni proprio quando serve a voi!
Infine segnalo un tutorial (in inglese) “professionale” sull’uso di launchd: porta come esempio il backup automatico di alcune cartelle e può essere trovato qui.

’nuff said