Automatizzare il Mac dal Terminale – Ancora Launchd

A volte bisogna saper ammettere i propri errori. Questa è una di quelle volte.

Nel mio post su launchd di qualche mese fa non avevo nascosto il mio scetticismo per una soluzione molto lontana dai canoni di Unix e troppo complicata per essere usata al posto di cron, il programma che nei sistemi operativi derivati da Unix è incaricato di eseguire periodicamente dei comandi o degli interi script in modo automatico.

Leggendo però questo post su MacStories, mi sono reso conto dell’esistenza di una ulteriore opzione di launchd, QueueDirectories, che permette di di tenere sotto controllo una (o più) directory del Mac e di eseguire automaticamente un comando ogni qualvolta si aggiunge un file alla directory osservata.1
Oltre a questa esiste una opzione più generale, WatchPaths, che permette di tenere sotto controllo uno o più file (o directory) ed eseguire un comando quando uno di questi file (o directory) viene modificato.

Con queste due nuove (almeno per me!) opzioni si può estendere notevolmente il campo di applicazione di launchd, facendogli eseguire un comando o uno script non solo in modo periodico (in sostituzione di cron), ma anche al verificarsi di un evento come l’aggiunta di un file ad una directory o la modifica di un determinato file.

Launchd, l’osservatore

Riprendiamo quindi il file plist di configurazione del post precedente e vediamo cosa possiamo fare se aggiungiamo l’opzione QueueDirectories.

Il punto di partenza è sempre lo stesso: vogliamo eseguire automaticamente lo script ~/bin/makeblog e rigenerare automaticamente il blog “Pazzi per la mela”.

Questa volta però vogliamo rigenerare il blog non ad un’ora ben definita ed immutabile, ma solo quando inseriamo un nuovo post nella directory ~/Dropbox/blog/.

In questo caso usare Dropbox (o un qualunque servizio analogo, Box, Copy, Google Drive, o perfino OneDrive di Microsoft) è particolarmente utile, perché permette di aggiungere il post anche lontano dal Mac, magari dopo averlo preparato sull’iPad o sull’iPhone.

Il file plist di configurazione del post precedente diventa

<?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>it.pazziperlamela.makeblog</string>

    <key>Program</key>
    <string>/Users/utente/bin/makeblog</string>

    <key>QueueDirectories</key>
    <array>
        <string>/Users/utente/Dropbox/blog/</string>
    </array>

    <key>StandardOutPath</key>
    <string>/Users/utente/Documenti/makeblog.log</string>

    <key>StandardErrorPath</key>
    <string>/Users/utente/Documenti/makeblog.err</string>

    <key>RunAtLoad</key>
    <false/>
</dict>
</plist>

Per attivarlo, come abbiamo già visto, basta salvarlo nella directory ~/Library/LaunchAgents/ del proprio account (dove il simbolo ~ indica la cartella Inizio o home dell’utente che sta usando il Mac) con il nome it.pazziperlamela.makeblog.plist (il nome del file deve essere uguale a quello senza estensione utilizzato alla riga 6 del file plist), ed eseguirlo una prima volta dal Terminale con il comando

$ launchctl load it.pazziperlamela.makeblog.plist

Ai successivi riavvii sarà il sistema operativo ad eseguire periodicamente lo script.

Conclusioni

Devo ammettere che le opzioni QueueDirectories e WatchPaths rendono launchd molto più interessante di quanto mi sia mai reso conto, permettendo di eseguire dei comandi di sistema o degli interi script in modo asincrono, al verificarsi di eventi particolari come la scrittura o la modifica di un file in una directory.

Intendiamoci, le mie riserve sulla complessità di launchd rimangono intatte. Inoltre continua a non piacermi il fatto che sia uno strumento confinato al solo OS X, con poche prospettive di diffusione al di fuori del mondo Apple fra i sistemi operativi derivati da Unix, come Linux e BSD.

Però pragmaticamente mi rendo conto che in certe circostanze launchd può rivelarsi uno strumento utilissimo e senza eguali. Basta solo usarlo con moderazione.


  1. Qualcosa di simile alle cosiddette “Folder Actions”, introdotte già da parecchi anni in OS X senza troppo successo, che istruivano il sistema operativo a tenere sotto controllo una directory e ad eseguire dei comandi AppleScript o Automator ogni volta che un file veniva aggiunto o rimosso da quella directory, oppure quando quest’ultima veniva aperta, chiusa o spostata. 
Annunci
Tagged with: , , , , ,
Pubblicato su programmazione
8 comments on “Automatizzare il Mac dal Terminale – Ancora Launchd
  1. frix ha detto:

    con poche prospettive di diffusione al di fuori del mondo Apple.

    viste le quote di vendita che sta avendo il mac (soprattutto rispetto al passato) non è comunque poca.

    Anche in questo caso porgo il mio plauso per il post.

    Mi piace

  2. Sabino Maggi ha detto:

    Mi rendo conto di essermi espresso male. Intendevo dire che è improbabile che uno strumento come launchd possa essere adottato nell’ambito dei sistemi operativi basati su Unix, come Linux e BSD. Ho corretto il post sperando che sia più chiaro.
    Grazie.

    Mi piace

  3. frix ha detto:

    Guarda, per andare fino in fondo ti sarei grato se aggiungessi il perché della considerazione. Non sono esperto in materia e non mi appare ancora chiara.

    Sto riflettendo se abbia qualche utilità pratica (per me, non in generale) prendermi un portatile con solo linux, conseguentemente sto valutando i miei flussi di lavoro per individuare le criticità e comprendere se siano ovviabili.

    Mi piace

    • Sabino Maggi ha detto:

      Come ho già scritto nel post precedente (purtroppo un vero esperto mi ha fatto notare qualche giorno fa che le serie di articoli non funzionano troppo bene su un mezzo come internet): “Una delle cose migliori dei sistemi Unix è che la maggior parte delle competenze, dei programmi sviluppati, dei file di configurazionee degli script di shell funzionano [su piattaforme differenti]”

      Purtroppo è improbabile che launchd, anche se la Apple lo ha rilasciato con una licenza liberale, venga adottato dalle distribuzioni di Linux e dei vari derivati di BSD Unix. Il che significa che tutte le competenze sviluppate con questo strumento non possono essere trasportate agli altri sistemi operativi basati su Unix, come è invece possibile far econ strumenti come cron o at.

      Se vuoi qualche dritta su Linux, magari ci scrivo un post apposito. A me piace (ammesso che non si sia già capito 😉 )

      Mi piace

  4. frix ha detto:

    Interessante.

    Ma si, un bel post dei tuoi su Linux mi interesserebbe…se hai voglia… 🙂

    Comprendo la posizione degli esperti della comunicazione sul web, sicuramente hanno ragione ma, personalmente, apprezzo molto le serie di articoli, anche lunghi.

    Linux mi incuriosisce.
    Sul piano lavorativo una grande remora –per me– sta nell’impossibilità di usare alcuni programmi che non hanno seri alterego su ipad (che mi permetterebbe di surrogarne l’assenza).
    Mi spiego: ithoughtsx non c’e per linux ma è ottimo su ipad, invece devonthink no (la versione ipad non mi convince). Ok posso usare Eagle Filer che archivia ”in chiaro” ma resto dubbioso. Idem sketchup ed il mio cad/bim. Non so come fz scrivener su Linux. Mi mancheranno Clarify, tinderbox ecc… Sto preparando una lista per chiarirmi le idee.

    Senza dimenticare che avrei necessità di studiare un bel po’ per essere operativo.

    In ogni caso, poi, se fosse, vorrei acquistare un portatile senza windows preinstallato, cosa non semplicissima.
    Poi il confronto con lo scherma Retina, perso in partenza.
    Un buon vantaggio però starebbe nel prezzo.
    Infine, quanto è semplice collegarsi ai videoproiettori? Vanno cercati ed installati preventivamente i drivers?

    Mi piace

  5. kOoLiNuS ha detto:

    Beh… se Apple avesse “studiato” e migliorato systemd (nonostante tutte le polemiche attorno ad esso) già sarebbe stato un dato di fatto.

    Invece, come sempre ha fatto, ha preferito scriversi un tool tutto suo. Fregandosene del resto del mondo. Aspettarsi ora che il resto del mondo li prenda in considerazione mi pare ingenuo.

    frix … se hai tanto tempo libero passa a GNU/Linux. Ma se ti aspetti di trovare programmi come Scrivener o Devonthink rimarrai parecchio deluso. Lavorassi in campo ingegneristico / sistemistico sarebbe più semplice ed i benefit notevoli.

    Mi piace

Rispondi

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione / Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione / Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione / Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione / Modifica )

Connessione a %s...

Informativa
Questo sito utilizza cookie di terze parti per inviarti pubblicità e servizi in linea con le tue preferenze. Se vuoi saperne di più o negare il consenso a tutti o ad alcuni cookie, clicca qui. Scorrendo questa pagina, cliccando su un link o su qualunque altro elemento o proseguendo la navigazione in altra maniera, acconsenti all'uso dei cookie.
Follow MelaBit on WordPress.com
Categorie
Archivi
%d blogger hanno fatto clic su Mi Piace per questo: