29/06/2013

Cygwin e schedulazione script bash

cygwinCygwin? Lo adoro, lo venero, costruirei una statua in ogni piazza a chi l’ha inventato!
Ops scusate, cominciamo dall’inizio, cos’è Cygwin lo trovate qui; cosa Cygwin fa è presto detto: rende più semplice la vita di ogni sistemista offrendo un livello di integrazione unico e praticamente totale tra sistemi Windows e Unix like.

In parole povere Cygwin permette di utilizzare su Windows tutto quel popò di software (molti dei quali ricadono nel calderone delle GNU Utils) che rendono i sistemi Unix like (quindi anche GNU/Linux) lo standard di fatto in ambito server.
Ad esempio il terminale Cygwin risulta infinitamente più integrato con Windows rispetto al semplice (e ottimo) Putty, grazie a Cygwin è possibile installare su Windows un’infinità di software e servizi (un esempio su tutti OpenSSH, ma potremmo parlare di Squid, X Window System e tanti altri) che sono standard di fatto e che su Windows non si trovano, oppure sono disponibili in modalità differenti e con differenti contratti di licenza.

Uno dei tanti vantaggi, anzi imho forse il principale vantaggio che offre Cygwin è quello di utilizzare le shell di Unix su Windows, ad esempio la celebre e mai abbastanza osannata bash shell.
Già sento l’eco dei lamenti dei fan Microsoft protagonisti di infiniti flame su “bash vs powershell”, non è questa la sede e non è questo l’argomento, è comunque un dato di fatto che la bash sia una shell semplice da usare, potente, estremamente versatile e soprattutto disponibile sia in ambito Unix che Windows, e questo grazie a Cygwin.
Quindi perchè complicarsi la vita utilizzando diverse sintassi quando usando la bash possiamo tranquillamente riciclare script tra sistemi operativi Unix like e Windows?

Una volta creato un bello script occorre anche farlo girare, ecco che quindi entra in gioco l’integrazione tra Cygwin e Windows, in particolare lo scheduler del sistema operativo Microsoft.
Il tutto è molto semplice, basta lanciare la bash passando uno script bash (oppure un semplice comando) e come argomento della stessa utilizzando l’opzione -c.

Ad esempio il seguente comando permette di comprimere con bzip2 i file presenti in C:\Apache\logs e che hanno nome che comincia per “access_log.” e “error_log.”, escludendo però i file che contengono nel nome la stringa “bz2” (quindi i file già compressi precedentemente); l’output della compressione è di tipo verboso e verrà salvato nella stessa directory in un log diverso per ogni giorno e avente nome compress.AAAMMGG.

c:\cygwin\bin\bash.exe -l -c "find /cygdrive/c/Apache/logs/ -type f -name "access_log.*" -o -name "error_log.*" | grep -v bz2 | xargs bzip2 -v >> /cygdrive/c/Apache/logs/compress.$(date +\%Y\%m\%d).log 2>&1"

Per schedulare il seguente comando con frequenza giornaliera basta creare un nuovo scheduled job
01

Specificare la frequenza con cui questo job dovrà girare
02

03

Infine specificare il comando desiderato come “Programma o script”
04

05

In questo modo il comando verrà eseguito ogni giorno alle ore 02:00, ovviamente si tratta di un esempio banale lungi dall’essere uno script completo e ben fatto per l’archiviazione di logs, è solo un esempio su come sia facile riciclare e schedulare script bash anche su Windows, ragione più che sufficiente per installare Cygwin su qualsiasi macchina su cui gira questo sistema operativo.

Lascia un commento

NB: I commenti sono moderati, questo potrebbe rallentare la pubblicazione del tuo commento.