<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Cron on Melabit</title>
    <link>https://static.233.196.69.159.clients.your-server.de/it/tags/cron/</link>
    <description>Recent content in Cron on Melabit</description>
    <generator>Hugo</generator>
    <language>it</language>
    <lastBuildDate>Sun, 18 Dec 2016 06:00:00 +0000</lastBuildDate>
    <atom:link href="https://static.233.196.69.159.clients.your-server.de/it/tags/cron/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Compleanno con permessi</title>
      <link>https://static.233.196.69.159.clients.your-server.de/it/2016/12/18/compleanno-con-permessi/</link>
      <pubDate>Sun, 18 Dec 2016 06:00:00 +0000</pubDate>
      <guid>https://static.233.196.69.159.clients.your-server.de/it/2016/12/18/compleanno-con-permessi/</guid>
      <description>&lt;p&gt;Oggi &lt;a href=&#34;https://melabit.wordpress.com/&#34;&gt;melabit&lt;/a&gt; compie tre anni. Per l&amp;rsquo;occasione ho chiesto all&amp;rsquo;amico Lux il permesso di ripubblicare un mio vecchio intervento sul suo (bellissimo) blog &lt;a href=&#34;http://web.archive.org/web/20120102191652/http://www.macworld.it/ping&#34;&gt;Ping&lt;/a&gt;, chiuso purtroppo con la cessazione della pubblicazione dell&amp;rsquo;edizione italiana di Macworld.&lt;/p&gt;&#xA;&lt;p&gt;Perché pubblicare di nuovo questo articolo dopo più di sei anni?&lt;/p&gt;&#xA;&lt;p&gt;Innanzi tutto perché quello che c&amp;rsquo;è scritto è ancora attuale e, come ha scritto a suo tempo Lux con il suo stile inimitabile, può essere utile per &amp;ldquo;&lt;em&gt;avvicinarsi agli incantesimi Unix che danno vita al mondo magico di Mac OS X&lt;/em&gt;&amp;rdquo;, una cosa a cui tengo sempre moltissimo. Magari oggi &lt;a href=&#34;https://melabit.wordpress.com/2015/04/28/automatizzare-il-mac-dal-terminale-ancora-launchd/&#34;&gt;proporrei di usare sul Mac&lt;/a&gt; &lt;code&gt;launchd&lt;/code&gt; al posto di &lt;code&gt;cron&lt;/code&gt;, anche se quest&amp;rsquo;ultimo rimane la soluzione più generica, valida su un qualunque sistema Unix.&lt;/p&gt;&#xA;&lt;p&gt;C&amp;rsquo;è poi un motivo più personale: proprio dopo questo intervento ho cominciato a pensare che tenere un blog non fosse un&amp;rsquo;idea proprio fuori dal mondo. Ci ho messo un po&amp;rsquo; (come sempre!) a realizzarla, ma dopo tre anni devo ammettere che è stata un&amp;rsquo;ottima decisione, le soddisfazioni non sono mancate.&lt;/p&gt;&#xA;&lt;h4 id=&#34;introduzione&#34;&gt;Introduzione&lt;/h4&gt;&#xA;&lt;p&gt;L&amp;rsquo;articolo rispondeva all&amp;rsquo;esigenza di un lettore di Ping di cambiare automaticamente i permessi di determinati tipi di file contenuti in una cartella del Mac. Cosa ci può essere di meglio del Terminale per fare queste cose?&lt;/p&gt;&#xA;&lt;p&gt;Ho lasciato praticamente inalterato il testo originale, limitandomi a correggere alcune imprecisioni e ad aggiungere qualche dettaglio qui e là.&lt;/p&gt;&#xA;&lt;h4 id=&#34;me-li-do-io-i-permessi&#34;&gt;Me li do io i permessi&lt;/h4&gt;&#xA;&lt;p&gt;&lt;strong&gt;Premessa #1&lt;/strong&gt;: il Terminale in Mac OS X si trova in &lt;code&gt;Applicazioni &amp;amp;#062; Utility&lt;/code&gt;. Una volta lanciato può essere configurato in molti modi (tramite le Preferenze) perdendo quell’aspetto un po&amp;rsquo; triste e troppo serioso che spaventa l’utente normale.&lt;/p&gt;&#xA;&lt;p&gt;Dopo l&amp;rsquo;avvio, il Terminale presenta il cosiddetto &lt;em&gt;prompt&lt;/em&gt;, che su OS X mostra tipicamente il nome del computer, la cartella dove ci si trova e il nome dell’utente. L’ultimo carattere del prompt è normalmente il &lt;code&gt;$&lt;/code&gt;. Nel Terminale i comandi vengono inseriti dopo il simbolo &lt;code&gt;$&lt;/code&gt; su quella che viene definita la &lt;em&gt;riga di comando&lt;/em&gt; e si eseguono premendo il tasto &lt;code&gt;Invio&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Il Terminale di OS X esegue di default la cosiddetta &lt;a href=&#34;https://tiswww.case.edu/php/chet/bash/bashref.html#Introduction&#34;&gt;&lt;em&gt;shell&lt;/em&gt; &lt;code&gt;bash&lt;/code&gt;&lt;/a&gt;, uno strumento potentissimo per interagire con il sistema operativo. La shell &lt;code&gt;bash&lt;/code&gt; può essere usata direttamente, scrivendo i comandi uno ad uno sulla riga di comando e leggendone il risultato direttamente nel Terminale.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://melabit.files.wordpress.com/2016/12/terminal.png&#34;&gt;&lt;img src=&#34;https://melabit.files.wordpress.com/2016/12/terminal.png&#34; alt=&#34;Il Terminale di OS X&#34; class=&#34;aligncenter&#34; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Oppure si possono scrivere degli &lt;code&gt;script&lt;/code&gt;, piccoli programmi nel linguaggio di &lt;code&gt;bash&lt;/code&gt; nei quali si inseriscono in sequenza i comandi da far eseguire alla shell, che si dimostrano molto utili per automatizzare delle operazioni che eseguiamo ripetutamente sul Mac.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Premessa #2&lt;/strong&gt;: perché usare i comandi di &lt;code&gt;bash&lt;/code&gt; invece di Automator o di AppleScript? Beh, innanzitutto perché &lt;code&gt;bash&lt;/code&gt; è multipiattaforma e quindi funziona su Linux e, volendo, anche su Windows. E poi semplicemente perché &lt;code&gt;bash&lt;/code&gt; mi piace!&lt;/p&gt;&#xA;&lt;p&gt;Lanciamo quindi il Terminale (magari configurandolo prima, io consiglio almeno di aumentare le dimensioni della finestra a circa 100×40 per stare comodi e di scegliere un tema grafico più accattivante di quello bianco e un po&amp;rsquo; spento di default) e iniziamo a lavorare.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://melabit.files.wordpress.com/2016/12/bash_profiles.png&#34;&gt;&lt;img src=&#34;https://melabit.files.wordpress.com/2016/12/bash_profiles.png&#34; alt=&#34;Configurazione di bash&#34; class=&#34;aligncenter&#34; /&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Creiamo innanzi tutto una cartella &lt;code&gt;~/bin&lt;/code&gt;, dove il carattere &lt;code&gt;~&lt;/code&gt; (tilde, ALT+5) indica per convenzione sui sistemi basati su Unix la cartella &lt;code&gt;Inizio&lt;/code&gt; (detta anche &lt;code&gt;Home&lt;/code&gt;) dell’utente che sta usando il computer in questo momento. Per farlo da Terminale, digitiamo (ATTENZIONE, come già detto &lt;code&gt;$&lt;/code&gt; indica solo l’ultimo carattere del prompt e &lt;strong&gt;NON&lt;/strong&gt; va mai inserito nei comandi seguenti):&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ cd&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ mkdir bin&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ chflags hidden bin&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ cd bin&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Il primo comando serve per essere sicuri di partire dalla &lt;code&gt;Home&lt;/code&gt;, il secondo crea una nuova cartella &lt;code&gt;bin&lt;/code&gt; nella &lt;code&gt;Home&lt;/code&gt;, il terzo la nasconde al Finder e l’ultimo comando ci fa spostare nella cartella &lt;code&gt;bin&lt;/code&gt; appena creata.&lt;/p&gt;&#xA;&lt;p&gt;In teoria siamo liberi di salvare i nostri comandi &lt;code&gt;bash&lt;/code&gt; in una qualunque cartella del Mac e possiamo anche usarne una già esistente. Ma usare la cartella &lt;code&gt;bin&lt;/code&gt; nella nostra &lt;code&gt;Home&lt;/code&gt; rispetta le convenzioni dei sistemi Unix e mi sembra preferibile.&lt;/p&gt;&#xA;&lt;p&gt;A questo punto usiamo &lt;code&gt;nano&lt;/code&gt; (un editor testuale molto semplice installato di default sul Mac) per editare lo &lt;em&gt;script&lt;/em&gt; &lt;code&gt;bash&lt;/code&gt; &lt;code&gt;cambia_permessi&lt;/code&gt;, nel quale inseriremo i comandi veri e propri che ci servono per cambiare i permessi dei file contenuti nella cartella nella quale verrà eseguito lo script:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ nano cambia_permessi&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Non preoccupatevi per l’interfaccia un po&amp;rsquo; ostica di &lt;code&gt;nano&lt;/code&gt;, qui ci basta usare solo due comandi, &lt;code&gt;CTRL+O&lt;/code&gt; per salvare il file editato e &lt;code&gt;CTRL+X&lt;/code&gt; per uscire da nano. Dimenticavo: &lt;code&gt;CTRL+O&lt;/code&gt; significa premere contemporaneamente il tasto &lt;code&gt;CTRL&lt;/code&gt;, l’ultimo in basso a sinistra sulle tastiere Mac (nei portatili è a fianco di fn), e il tasto &lt;code&gt;O&lt;/code&gt;. Analogamente per &lt;code&gt;CTRL+X&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Torniamo al nostro file &lt;code&gt;cambia_permessi&lt;/code&gt;. A questo punto bisognerebbe copiare a mano le linee mostrate qui sotto. Ma OS X è furbo e il copia e incolla funziona anche nella finestra del Terminale, per cui è sufficiente selezionare tutte le linee mostrate qui sotto, copiarle e poi incollarle nella finestra del Terminale dove è attivo &lt;code&gt;nano&lt;/code&gt;:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;#!/bin/bash&#xA;#&#xA;DIR=~/scansioni/&#xA;FILES=*&#xA;PERM=u+rw&#xA;#&#xA;if [ -d $DIR ]; then&#xA;&#x9;cd $DIR&#xA;&#x9;chmod -R $PERM $FILES&#xA;&#x9;cd&#xA;fi&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Salviamo lo script premendo &lt;code&gt;CTRL+O&lt;/code&gt; ed usciamo da &lt;code&gt;nano&lt;/code&gt; con &lt;code&gt;CTRL+X&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Cosa significano questi comandi? Il più importante è &lt;code&gt;chmod&lt;/code&gt;, che cambia i permessi di tutti i file contenuti nella cartella ``~/scansioni/` in modo che siano leggibili e scrivibili dall&amp;rsquo;utente attuale del Mac. Il resto è solo roba di contorno.&lt;/p&gt;&#xA;&lt;p&gt;Quello che è ancora più importante è che lo script è totalmente parametrico: basta cambiare i valori di &lt;code&gt;DIR&lt;/code&gt;, &lt;code&gt;FILES&lt;/code&gt; e &lt;code&gt;PERM&lt;/code&gt; per adattarlo alle proprie esigenze.&lt;/p&gt;&#xA;&lt;p&gt;Per esempio, se la cartella &lt;code&gt;~/scansioni/&lt;/code&gt; contenesse vari tipi di file e si volessero cambiare i permessi dei soli file &lt;code&gt;pdf&lt;/code&gt; lasciando gli altri file invariati, la riga &lt;code&gt;FILES=*&lt;/code&gt; diventerebbe &lt;code&gt;FILES=*.pdf&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Non è finita. Controlliamo prima di tutto di avere veramente fatto tutto bene con il comando:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ cat cambia_permessi&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;che dovrebbe mostrare sullo schermo lo script appena inserito.&lt;/p&gt;&#xA;&lt;p&gt;Per semplificarci la vita, rendiamo lo script eseguibile con il comando:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ chmod u+x cambia_permessi&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Bisogna notare che con questo comando abbiamo reso eseguibile lo script solo per l’utente attuale del Mac. I motivi li tralascio per brevità, ma credetemi, è decisamente meglio fare così.&lt;/p&gt;&#xA;&lt;p&gt;Un ultimo passo necessario. In questo momento, per cambiare i permessi dei file nella cartella &lt;code&gt;~/scansioni/&lt;/code&gt; bisogna eseguire a mano il comando dal Terminale:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ ~/bin/cambia_permessi&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;(anche se, per come è configurato di default OS X, usare soltanto &lt;code&gt;$ cambia_permessi&lt;/code&gt;, senza scrivere esplicitamente il percorso dove è salvato lo script basta e avanza).&lt;/p&gt;&#xA;&lt;p&gt;Ciò è sicuramente molto più comodo di cambiare uno ad uno i permessi dei file, ma si può fare di meglio.&lt;/p&gt;&#xA;&lt;p&gt;Qui entra in gioco &lt;code&gt;cron&lt;/code&gt;, uno strumento che esegue dei comandi stabiliti dall’utente a intervalli di tempo predefiniti. Sembra una cosa un po&amp;rsquo; cretina, ma in realtà permette di far fare al computer un mare di cose automaticamente. Purtoppo la sintassi di cron è orrenda. E questo post sta diventando troppo lungo.&lt;/p&gt;&#xA;&lt;p&gt;Cercherò di sintetizzare ma se qualcuno è interessato posso scrivere qualcosa in proposito. (Nel frattempo l&amp;rsquo;ho fatto, chi fosse interessato può leggere questo &lt;a href=&#34;https://melabit.wordpress.com/2014/11/22/automatizzare-il-mac-dal-terminale-sua-maesta-cron/&#34;&gt;articolo dettagliato su cron&lt;/a&gt;.)&lt;/p&gt;&#xA;&lt;p&gt;Diciamo che vogliamo che ogni cinque minuti lo script &lt;code&gt;cambia_permessi&lt;/code&gt; venga eseguito automaticamente. Dal solito Terminale dobbiamo allora eseguire i comandi:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ export EDITOR&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;/usr/bin/nano&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ crontab -e&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;La prima riga serve ad evitare di usare l’editor preimpostato, &lt;code&gt;vi&lt;/code&gt;, vn vero reperto archeologico che sarebbe bene dimenticare una volta per tutte. Dovrebbe invece aprirsi il solito &lt;code&gt;nano&lt;/code&gt;, in cui dobbiamo incollare &lt;strong&gt;esattamente&lt;/strong&gt; la riga seguente:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;*/5 * * * * ~/bin/cambia_permessi&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;(prima e dopo ciascun asterisco è presente una tabulazione), eventualmente aggiungendola in coda ai comandi già presenti.&lt;/p&gt;&#xA;&lt;p&gt;Salviamo con &lt;code&gt;CTRL+O&lt;/code&gt; e usciamo da &lt;code&gt;crontab&lt;/code&gt; con &lt;code&gt;CTRL+X&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Ovviamente se vogliamo che lo script venga eseguito più o meno frequentemente, basta cambiare il valore &lt;code&gt;*/5&lt;/code&gt; in, diciamo, &lt;code&gt;*/2&lt;/code&gt; o &lt;code&gt;*/15&lt;/code&gt; (per eseguire lo script ogni 2 o 15 minuti). Per casi più complicati &lt;a href=&#34;https://melabit.wordpress.com/2014/11/22/automatizzare-il-mac-dal-terminale-sua-maesta-cron/&#34;&gt;basta leggere qui&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Abbiamo finito. Sembra complicato, ma credetemi, è molto più lungo da leggere (e da scrivere!) che da mettere in pratica.&lt;/p&gt;&#xA;&lt;h4 id=&#34;nota-finale&#34;&gt;Nota finale&lt;/h4&gt;&#xA;&lt;p&gt;Per chi ha paura del Terminale e soprattutto di &lt;code&gt;cron&lt;/code&gt;, un programma potente ma, bisogna ammetterlo, ben poco &lt;em&gt;user-friendly&lt;/em&gt;, ecco una soluzione aggiuntiva, farina di Lux.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Aggiungo solo una piccola nota per gli inesperti di Terminale che si scontrano con &lt;code&gt;cron&lt;/code&gt; (e, su Snow Leopard, con &lt;code&gt;launchd&lt;/code&gt;). Una scorciatoia artigianale consiste nel definire un evento ricorrente dentro iCal e, nelle informazioni relative, stabilire che in occasione dell’evento va eseguito uno script.&lt;/p&gt;&lt;/blockquote&gt;&#xA;&lt;p&gt;Molto pratica se si ha bisogno di ripetere uno &lt;em&gt;script&lt;/em&gt; una o due volte al giorno al massimo, in tutti gli altri casi temo che finirebbe per riempire all&amp;rsquo;inverosimile il proprio Calendario, con conseguenze che francamente mi sfuggono.&lt;/p&gt;&#xA;</description>
    </item>
    <item>
      <title>Automatizzare il Mac dal Terminale - Sua maestà cron</title>
      <link>https://static.233.196.69.159.clients.your-server.de/it/2014/11/22/automatizzare-il-mac-dal-terminale-sua-maesta-cron/</link>
      <pubDate>Sat, 22 Nov 2014 06:00:00 +0000</pubDate>
      <guid>https://static.233.196.69.159.clients.your-server.de/it/2014/11/22/automatizzare-il-mac-dal-terminale-sua-maesta-cron/</guid>
      <description>&lt;p&gt;Nella &lt;a href=&#34;https://melabit.wordpress.com/2014/11/06/automatizzare-il-mac-dal-terminale-il-comando-at/&#34;&gt;prima parte di questa serie&lt;/a&gt; abbiamo visto come usare il comando &lt;code&gt;at&lt;/code&gt; per automatizzare determinate attività sul Mac dal Terminale.&lt;/p&gt;&#xA;&lt;p&gt;At è utile ogni volta che si vuole eseguire un comando automaticamente una sola volta e in un momento ben definito&lt;/p&gt;&#xA;&lt;p&gt;Ma at ha anche parecchi limiti e non è adatto a svolgere una attività periodica in modo trasparente, come richiesto da Lucio Bragagnolo nel &lt;a href=&#34;http://macintelligence.org/blog/2014/10/11/facciamo-finta-che/&#34;&gt;post da cui ha preso spunto questa serie&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;h4 id=&#34;un-demone-chiamato-cron&#34;&gt;Un demone chiamato cron&lt;/h4&gt;&#xA;&lt;p&gt;Lo strumento più adatto a questo scopo è &lt;code&gt;cron&lt;/code&gt;, il cui nome deriva dal greco &lt;code&gt;chronos&lt;/code&gt; (tempo). Cron permette di eseguire comandi singoli o &lt;a href=&#34;https://melabit.wordpress.com/2014/11/06/script-di-shell-in-os-x/&#34;&gt;interi script&lt;/a&gt;, in modo automatico ad una data e ora stabilita, con una precisione che arriva fino al minuto.&lt;/p&gt;&#xA;&lt;p&gt;Cron è nel gergo di Unix un &lt;code&gt;demone&lt;/code&gt;, un comando eseguito automaticamente all&amp;rsquo;avvio di OS X (o di Linux) che rimane sempre attivo in sottofondo e agisce senza necessità di alcun intervento da parte dell&amp;rsquo;utente.&#xA;Cron si attiva ogni minuto ed esegue (quando serve) i comandi contenuti nel file &lt;code&gt;crontab&lt;/code&gt; di configurazione.&lt;/p&gt;&#xA;&lt;p&gt;Ogni utente del Mac ha a disposizione un proprio file crontab, ma esiste anche un file crontab di sistema gestito dall&amp;rsquo;amministratore, normalmente il primo utente creato al momento della installazione di OS X. I file crontab degli utenti sono contenuti nella directory &lt;code&gt;/usr/lib/cron/tabs/&lt;/code&gt; e si chiamano con il &lt;a href=&#34;http://www.macitynet.it/modificare-il-nome-dellaccount-utente-di-os-x-o-della-cartella-inizio/&#34;&gt;nome account (o nome breve) dell&amp;rsquo;utente&lt;/a&gt;, quello di sistema è &lt;code&gt;/etc/crontab&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Non c&amp;rsquo;è bisogno di precipitarsi a controllare, nelle nuove versioni di OS X il file &lt;code&gt;/etc/crontab&lt;/code&gt; non esiste più, come vedremo la prossima volta.&lt;/p&gt;&#xA;&lt;p&gt;Dal Terminale, si può visualizzare il contenuto del proprio file crontab con il comando&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;$ crontab -l&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;mentre per modificarlo bisogna &lt;em&gt;necessariamente&lt;/em&gt; usare&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;$ crontab -e&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;e mai un editor di testo (cosa fra l&amp;rsquo;altro impossibile senza essere amministratore del Mac).&lt;/p&gt;&#xA;&lt;p&gt;Infine il comando per cancellare il proprio file crontab è&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;$ crontab -r&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;h4 id=&#34;comè-fatto-crontab&#34;&gt;Com&amp;rsquo;è fatto crontab&lt;/h4&gt;&#xA;&lt;p&gt;Ma come è fatto un file crontab? È piuttosto semplice: un file crontab è composto da una o più righe contenenti ciascuna sei campi (colonne) separati da spazi&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;*&#x9;*&#x9;*&#x9;*&#x9;*&#x9;comando&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Nei primi cinque campi si inseriscono le indicazioni di data ed ora, sostituendole agli asterischi, nell&amp;rsquo;ultimo campo il comando o il nome dello script da eseguire. Ad esempio,&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;05&#x9;*&#x9;*&#x9;*&#x9;*&#x9;echo &amp;quot;Tanti saluti da cron!&amp;quot;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;stamperà sul Terminale al quinto minuto di ogni ora la stringa &amp;ldquo;Tanti saluti da cron!&amp;rdquo;&lt;/p&gt;&#xA;&lt;p&gt;In realtà sul Terminale non viene mai stampato nulla. Infatti, &lt;a href=&#34;https://melabit.wordpress.com/2014/11/06/automatizzare-il-mac-dal-terminale-il-comando-at/&#34;&gt;analogamente ad  at&lt;/a&gt;, ogni volta che cron esegue un comando definito nel file crontab di un utente, provvede ad inviargli una email con l&amp;rsquo;output completo generato dal comando stesso, email che può essere letta dal Terminale con (chi ci avrebbe mai pensato!) &lt;code&gt;mail&lt;/code&gt;.&#xA;La ragione è semplice: cron potrebbe agire dietro le quinte per mesi od anni, effettuando azioni periodiche come il backup in rete di determinate directory o la pulizia del sistema da certi file inutili. È più razionale inviare all&amp;rsquo;utente interessato una email che gli permetta di controllare, quando ne ha tempo e voglia, che tutto vada bene, invece di disturbarlo periodicamente mentre sta usando il Terminale con l&amp;rsquo;output delle azioni eseguite da cron.&lt;/p&gt;&#xA;&lt;p&gt;Per disabilitare l&amp;rsquo;invio della email mandando l&amp;rsquo;output del comando eseguito da cron sul file &lt;code&gt;output.txt&lt;/code&gt; sul Desktop, si può utilizzare la tecnica standard di Unix di redirezione dell&amp;rsquo;output&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;&lt;pre&gt;&#xA;05&#x9;*&#x9;*&#x9;*&#x9;*&#x9;echo &amp;ldquo;Tanti saluti da cron!&amp;rdquo; &amp;raquo; ~/Desktop/output.txt&#xA;&lt;/pre&gt;&lt;/code&gt;&lt;/p&gt;&#xA;&lt;p&gt;dove il simbolo &lt;code&gt;&amp;raquo;&lt;/code&gt; aggiunge l&amp;rsquo;output del comando eseguito da cron alla fine del file &lt;code&gt;output.txt&lt;/code&gt; (usando un solo &lt;code&gt;&amp;gt;&lt;/code&gt; si sovrascrive ogni volta il contenuto precedente del file).&lt;/p&gt;&#xA;&lt;h4 id=&#34;data-e-ora-in-cron&#34;&gt;Data e ora in cron&lt;/h4&gt;&#xA;&lt;p&gt;Rimane da definire come sono codificate le indicazioni della data e dell&amp;rsquo;ora a cui eseguire cron. Non è molto difficile, almeno se ci si limita ai casi più comuni. La figura seguente mostra il significato dei campi del file crontab.&lt;/p&gt;&#xA;&lt;p&gt;[caption id=&amp;ldquo;attachment_1418&amp;rdquo; align=&amp;ldquo;aligncenter&amp;rdquo; width=&amp;ldquo;500&amp;rdquo;]&lt;img src=&#34;https://melabit.files.wordpress.com/2014/11/cron1.png&#34; alt=&#34;Significato dei campi di una riga del file crontab.&#34; width=&#34;500&#34; /&gt; Significato dei campi di una riga del file crontab.[/caption]&lt;/p&gt;&#xA;&lt;p&gt;Quindi per eseguire un comando al quindicesimo minuto di ogni ora bisogna inserire la riga&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;15&#x9;*&#x9;*&#x9;*&#x9;*&#x9;comando&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;mentre per farlo alle 2:00 di ogni lunedì&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;00&#x9;02&#x9;*&#x9;*&#x9;1&#x9;comando&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Alcuni simboli permettono di specificare dei valori multipli in un campo. Il trattino &amp;ldquo;-&amp;rdquo; indica un intervallo, per cui la riga&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;30 07&#x9;*&#x9;*&#x9;1-5&#x9;comando&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;esegue il comando alle 7:30 dal lunedì al venerdì.&lt;/p&gt;&#xA;&lt;p&gt;La virgola &amp;ldquo;,&amp;rdquo; indica una lista di valori. Quindi&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;00&#x9;08&#x9;1,15,30&#x9;&#x9;*&#x9;*&#x9;comando&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;esegue il comando specificato il giorno 1, 15 e 30 di ogni mese.&lt;/p&gt;&#xA;&lt;p&gt;L&amp;rsquo;asterisco equivale a selezionare tutti i valori consentiti per il campo a cui si riferisce. Una riga come questa&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;*&#x9;*&#x9;*&#x9;*&#x9;*&#x9;echo &amp;quot;Tanti saluti da cron!&amp;quot;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;istruisce cron ad eseguire il comando &lt;code&gt;echo &amp;quot;Tanti saluti da cron!&amp;quot;&lt;/code&gt; una volta al minuto e per sempre!&lt;/p&gt;&#xA;&lt;p&gt;Infine la barra &amp;ldquo;/&amp;rdquo; indica l&amp;rsquo;incremento del campo numerico, per cui&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;*&#x9;*/3&#x9;*&#x9;*&#x9;*&#x9;echo &amp;quot;Tanti saluti da cron!&amp;quot;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;equivale a far eseguire il comando ogni 3 ore.&lt;/p&gt;&#xA;&lt;p&gt;Tutto qui. Ci sono delle finezze ulteriori, ma chi fosse interessato può leggere qualche articolo specifico su cron, come &lt;a href=&#34;http://en.wikipedia.org/wiki/Cron&#34;&gt;questa pagina su Wikipedia&lt;/a&gt;&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;, o &lt;a href=&#34;https://help.ubuntu.com/community/CronHowto&#34;&gt;questo tutorial molto dettagliato&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;h4 id=&#34;cron-online&#34;&gt;Cron online&lt;/h4&gt;&#xA;&lt;p&gt;Per i più pigri esiste un servizio online che &lt;a href=&#34;http://crontab-generator.org/&#34;&gt;genera automaticamente la riga del file crontab&lt;/a&gt; corrispondente alle date e ore specificate tramite l&amp;rsquo;interfaccia web. Ma si fa prima ad imparare la sintassi di cron che ad orientarsi nella miriade di opzioni del servizio.&lt;/p&gt;&#xA;&lt;p&gt;Molto più utile mi sembra il &lt;a href=&#34;http://www.cronsandbox.com/&#34;&gt;Cron Sandbox&lt;/a&gt;, un altro servizio online che consente di verificare che la lista di date e ore generate da una particolare riga del file crontab corrisponda a quanto ci si attende.&lt;/p&gt;&#xA;&lt;h4 id=&#34;al-lavoro&#34;&gt;Al lavoro&lt;/h4&gt;&#xA;&lt;p&gt;Se vogliamo usare il comando cron per &lt;a href=&#34;http://melabit.wordpress.com/2014/11/06/automatizzare-il-mac-dal-terminale-il-comando-at/&#34;&gt;eseguire lo script &lt;code&gt;~/bin/makeblog&lt;/code&gt;&lt;/a&gt; e rigenerare automaticamente il blog &amp;ldquo;Pazzi per la mela&amp;rdquo; alle 2:00 di ogni notte, dobbiamo inserire nel file crontab la riga&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;00&#x9;02&#x9;*&#x9;*&#x9;*&#x9;~/bin/makeblog&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;e dimenticarci subito dopo della sua stessa esistenza. Cron lavorerà per noi ogni notte, preciso ed instancabile senza infastidirci, a meno che non decidiamo di andare a controllare quello che sta combinando.&lt;/p&gt;&#xA;&lt;h4 id=&#34;e-lux&#34;&gt;E Lux?&lt;/h4&gt;&#xA;&lt;p&gt;Non mi sono dimenticato di Lux. &lt;a href=&#34;https://melabit.wordpress.com/2014/11/06/automatizzare-il-mac-dal-terminale-il-comando-at/&#34;&gt;Come già ricordato la volta scorsa&lt;/a&gt;, Lux vorrebbe poter scrivere i post &lt;a href=&#34;http://macintelligence.org&#34;&gt;del suo blog&lt;/a&gt; lasciando al sistema il compito di aggiornare i file html e di trasferirli sul server per la pubblicazione online. E vuole farlo indifferentemente dal Mac o dall&amp;rsquo;iPad (e perché no, anche dall&amp;rsquo;iPhone).&lt;/p&gt;&#xA;&lt;p&gt;Con cron è semplice. Basterà mettere la directory contenente i vari &lt;em&gt;pezzi&lt;/em&gt; del blog &lt;a href=&#34;http://octopress.org/&#34;&gt;Octopress&lt;/a&gt; dentro la cartella di &lt;a href=&#34;http://www.dropbox.com&#34;&gt;Dropbox&lt;/a&gt; del Mac &lt;sup id=&#34;fnref:2&#34;&gt;&lt;a href=&#34;#fn:2&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;2&lt;/a&gt;&lt;/sup&gt; e creare lo script &lt;code&gt;makeblog&lt;/code&gt;, configurando cron in modo da eseguirlo automaticamente all&amp;rsquo;ora desiderata.&lt;/p&gt;&#xA;&lt;p&gt;Se Lux volesse poter aggiornare il blog quattro volte al giorno (esagerato!) alle ore 0, 6, 12 e 18, dovrebbe inserire in crontab la riga&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;00&#x9;*/6&#x9;*&#x9;*&#x9;*&#x9;~/bin/makeblog&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;oppure qualcosa di più &lt;em&gt;specifico&lt;/em&gt; come&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;30&#x9;1,5,12,19&#x9;*&#x9;*&#x9;*&#x9;~/bin/makeblog&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;adattando così gli orari di aggiornamento ai propri ritmi di lavoro.&lt;/p&gt;&#xA;&lt;p&gt;Ogni volta che Lux scrive un nuovo post con il Mac non dovrà fare altro che salvarlo nella directory &lt;em&gt;giusta&lt;/em&gt; della sua installazione di Octopress, né più né meno di come fa già ora. Se invece usa l&amp;rsquo;iPad o l&amp;rsquo;iPhone, deve solo ricordarsi di inviare il post a Dropbox, scegliendo la stessa directory che usa sul Mac.  Appena l&amp;rsquo;iPad si troverà connesso ad una rete, invierà il nuovo file a Dropbox, che lo spedirà a sua volta al Mac.&lt;/p&gt;&#xA;&lt;p&gt;Tutto automatico, senza Apple Script, Azioni Cartelle, e mal di testa.&lt;/p&gt;&#xA;&lt;h4 id=&#34;conclusioni&#34;&gt;Conclusioni&lt;/h4&gt;&#xA;&lt;p&gt;Con cron &lt;em&gt;the sky is the limit&lt;/em&gt;, o quasi. Io per anni ho fatto fare a cron il backup completo del contenuto di un sito web &lt;em&gt;professionale&lt;/em&gt;, contenente centinaia di documenti e di programmi da distribuire agli utenti registrati, e del relativo database MySQL. Una volta scritto lo script che eseguiva il backup vero e proprio (questa è stata la cosa veramente complicata, visto che volevo mantenere backup multipli orari, giornalieri e mensili), ho lasciato fare a cron e&amp;hellip; me ne sono letteralmente dimenticato.&lt;/p&gt;&#xA;&lt;p&gt;Ma non finisce qui. La prossima volta mi toccherà parlare di &lt;code&gt;launchd&lt;/code&gt;. Come potrei evitarlo, visto che questo blog è focalizzato (più o meno) sul Mac?&lt;/p&gt;&#xA;&lt;div class=&#34;footnotes&#34; role=&#34;doc-endnotes&#34;&gt;&#xA;&lt;hr&gt;&#xA;&lt;ol&gt;&#xA;&lt;li id=&#34;fn:1&#34;&gt;&#xA;&lt;p&gt;Poteva mai mancare un riferimento ad una pagina di Wikipedia? MA non è certo colpa mia se Wikipedia è una delle cose migliori del web e che tante pagine sono fatte veramente bene.&amp;#160;&lt;a href=&#34;#fnref:1&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li id=&#34;fn:2&#34;&gt;&#xA;&lt;p&gt;Si potrebbe anche &lt;a href=&#34;http://melabit.wordpress.com/2014/03/21/come-mettere-un-piolo-quadrato-in-un-buco-rotondo/&#34;&gt;usare un collegamento simbolico&lt;/a&gt; o un altro servizio di condivisione dei file, ma non generalizziamo troppo.&amp;#160;&lt;a href=&#34;#fnref:2&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/div&gt;&#xA;</description>
    </item>
  </channel>
</rss>
