Lascia un commento

Eseguire azioni in automatico su OSX: usare Launchd

Quante volte vi siete trovati a desiderare che il vostro computer eseguisse certe azioni in automatico, senza che voi non dobbiate preoccuparvi di nulla? Insomma, il nostro pc fa tantissima roba senza che noi ce ne accorgiamo, perché in mezzo a questa roba non possiamo metterci anche qualcosa che faccia comodo a noi?

Se usate Windows

Potete cambiare sistema operativo, dopodiché continuare a leggere questo articolo. Penso ci sia un metodo per automatizzare le cose anche nel sistema operativo di Microsoft, ma cambiando sistema avrete mille altri vantaggi, mi ringrazierete!

Se usate Linux

Ci viene fornito lo strumento cron. Di cui non parlerò in questo articolo (magari in uno dei prossimi, chi lo sa?) perché non l’ho mai usato, ma se cercate con Google troverete un sacco di materiale a riguardo.

Se usate OSX

Anche OSX ci fornisce cron, come se fossimo su Linux. Ma ho detto che in questo articolo non parlerà di cron e non mi sono mai occupato di altri sistemi operativi che non ho ancora citato, dunque dove sta l’inghippo?

Apple ci fornisce uno strumento un po’ meno immediato di cron, ma altrettanto utile per schedulare azioni nel nostro sistema operativo: di chiama Launchd e io vi spiegherò come cominciare a usarlo.

Condizioni iniziali

Io vi farò un esempio particolare per spiegarvi l’uso di questo strumento, poi sarete voi a dovervi inventare un utilizzo che sia intelligente per voi, eventualmente cercando altre funzioni di Launchd che io non ho trattato in questo articolo per pigrizia o perché non le ho cercate/trovate, probabilmente perché non mi servono oppure di nuovo per pigrizia.

Nello scorso articolo vi ho raccontato che ho scritto uno script bash per effettuare il backup che utilizzo per effettuare il backup di un disco esterno. Mi piacerebbe adesso che questo script venisse eseguito in automatico a intervalli regolari, in modo che io non mi debba interessare più di tanto alla faccenda e non debba lanciare lo script a mano.

Dunque abbiamo uno script bash, la volontà di eseguirlo in automatico a intervalli regolari e uno strumento per farlo. Una volta imparato a usare lo strumento dovremmo essere a posto, no?

Il file .plist

Per prima cosa dobbiamo scrivere un file con estensione .plist. Questo file conterrà le informazioni da dare a Launchd, per esempio qual è lo script che vogliamo eseguire e quanto spesso. Il nome di questo file di solito somiglia a un URL web scritto al contrario. Il nome del mio somiglia a it.nomeHost.smartBackup.plist; io non so se questa cosa sia una regola da seguire assolutamente, immagino di no, ma ho visto che tutti utilizzano questo metodo dunque immagino ci sia un motivo, fosse anche solo il sentirsi fighi per chiamare i files come gli sviluppatori veri. Vi incollo il file che ho utilizzato io che poi potete copiare e modificare a vostro piacimento (dopo lo commenteremo assieme).

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" \
"http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">

<dict>
<!-- Contains a unique string that identifies your daemon to launched. This key is required. -->
<key>Label</key>
<string>it.hostname.smartBackup</string>
<!-- Contains the arguments [to exec()] used to launch your daemon. This key is required.  -->
<key>ProgramArguments</key>
<array>
<string>/bin/bash</string>
<string>/Users/username/bin/smartBackup.sh</string>
</array>
<!-- This optional key specifies the user to run the job as. This key is only applicable when launchd is running as root. -->
<!-- <key>UserName</key>
<string>username</string> -->
<!-- When to run -->
<!-- <key>StartInterval</key>
<integer>43200</integer> -->
<key>StartCalendarInterval</key>

<dict>
<key>Minute</key>
<integer>05</integer>
<key>Hour</key>
<integer>20</integer>
</dict>
</dict>
</plist>

Secondo me questo linguaggio somiglia molto all’XML se proprio non è lui (non conosco l’XML dunque non mi azzardo a dire che non sia un qualcosa di strano che ci somiglia molto). Dunque possiamo dire che se conoscete l’XML siete avvantaggiati, se non lo conoscete ma decidete di leggere queste poche righe di codice vedrete che non è così difficile capire dove stiamo andando a parare.

Ora commentiamo le diverse sezioni del file.

Dopo un po’ di header che lasciamo perdere c’è la label dove possiamo scrivere il nome del nostro servizio. Dopodiché dobbiamo inserire il percorso dove Launchd deve andarsi a prendere lo script da eseguire. Usiamo il percorso assoluto, dopo vedremo il perché.

Dopo aver scritto il cosa è il momento di scrivere il quando. Nella sezione StartCalendarInterval possiamo inserire l’ora e il minuto in cui vogliamo che ogni giorno sia eseguito il nostro script. Per altre opzioni vedere le varie guide reperibili online. Come per esempio QUESTA.

Fatto tutto ciò salviamo il nostro file e chiudiamo l’editor. Il più è fatto.

Far eseguire le azioni

Perché il sistema operativo esegua queste nostre istruzioni dobbiamo copiare questo file .plist in una specifica cartella. In realtà le cartelle sono due e sono:

$HOME/Library/LaunchAgents/

oppure

/Library/LaunchAgents

questo perché possiamo decidere se eseguire l’azione solo quando è loggato il nostro utente oppure se eseguirlo per tutti gli utenti del sistema.

A questo punto basterà un reboot del sistema per avere il nostro servizio attivo! Buon divertimento e lasciatemi nei commenti l’azione che avete automatizzato usando questa mia guida perché le possibilità di utilizzo di questo servizio hanno i limiti solamente della nostra fantasia!

Perché Launchd e non cron?

Un’ultima nota: all’inizio dell’articolo ho detto che anche OSX ci mette a disposizione cron, dunque perché utilizzare qualcosa d’altro? Me lo sono chiesto anche io e cercando in rete pare che Launchd sia progettato per eseguire le azioni programmate anche quando il Mac è in stato di sleep (non so se corrisponda allo stato di stop, ma credo di no) e inoltre se il computer è spento al momento di eseguire l’azione questa viene eseguita nonappena il computer viene acceso. Detto ciò vedete voi se utilizzare Launchd che funziona solamente sui sistemi Apple oppure se imparare a usare cron in modo da fare il lavoro una volta sola per quando utilizzerete Linux (sempre che già non lo facciate).

Lascia un commento

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...

%d blogger cliccano Mi Piace per questo: