venerdì 24 gennaio 2014

UNIX, controllo consistenza directory

Per lavoro mi occupo, tra l'altro, di muovere file che ricevo da partner esterni.
Spesso ricevo i file, devo lavorarli in qualche modo (crittografia, decrittografia, compressione, normalizzazione ...) e poi li devo girare ad altre entità.
Devo avere la certezza essi siano stati lavorati e ruotati, di seguito la mia organizzazione ed il mio script di controllo.
Di seguito la soluzione che ho adottato sulla piattaforma Unix, usando la Korn Shell.

Tutti i file ricevuti vengono messi in un unica cartella, dove poi sono presenti delle sottocartelle divise per argomenti, quindi tutto starà in C:\MiaDir\...
Ogni giorno lo schedulatore automatico del sistema operativo esegue il seguente script:

#!/bin/ksh
# Shell ControllaDir.ksh
# Controlla presenza file nelle directory di work
#- DEFINIZIONE VARIABILI GLOBALI ----------------------------------------------------------------------------------
WORKDIR=/cft_work_prod         # Directory di work
LOG=/batch/log/ControllaDir.log     # LogFile
LOGA=/batch/log/ControllaDir.loga     # LogFile di appoggio per pulizia
LOGB=/batch/log/ControllaDir.logB     # LogFile di appoggio quotifdiano
ECCEZIONI=/batch/bin/ControllaDirEccezioni.ini        # File contenente le eccezioni al controllo


#- ELABORAZIONE  --------------------------------------------------------------------------------------------------
# Creazione file contenente la lista dei files presenti.
find $WORKDIR/* -type f > $LOGB

#Pulizia Files di output
cat $ECCEZIONI|while read ECCEZIONE
    do
        grep -v $ECCEZIONE     $LOGB > $LOGA
        mv $LOGA $LOGB
    done

echo "." >>$LOG
echo "##########################################################################################" >>$LOG
date >>$LOG  

#Controllo consistenza file di log
if [ -s $LOGB ]
    then
    more $LOGB >>$LOG
    else
    echo "Nel path $WORKDIR del sistema $HOSTNAME (CFTAPPA0) non sono presenti file!" >>$LOG
fi

#Invio del file di log via SMTP
sendmail -v user@domainname < $LOG
Andiamo ad analizzare cosa fà lo script:
In testa mi segno le mie variabili, in modo qualsiasi modifica devo fare allo script mi basta farla lì. Memorizzo in:
  • WORKDIR il path origine dove devo cercare i file;
  • LOG E' il nome file in cui vado a scrivere l'esito della ricerca;
  • LOGA E' un file di log di appoggio, utile per avere il risultato definitivo;
  • LOGB E' un file di log di appoggio, utile per avere il risultato definitivo;
  • ECCEZIONI E' un file in cui ho inserito tutte le directory o nomi file che se trovati consistenti non devono essere considerati nel file di log;
Il primo passo esegue la ricerca nella cartella indicata facendo in modo che,, grazie al parametro -type f vengano evidenziati solo i file.

Il passo seguente fa si che vengano evitati dei falsi positivi, ovvero, per esperienza so che se mi trovo determinati file non devo assolutamente preoccupami, li inserisco nel file ECCEZIONI ed il log di questo script sarà ripulito dai "falsi positivi". Logicamente più grande sarà il file ECCEZIONI più tempo impiegherà lo script ad essere eseguito, nel mio caso ho una settantina di record in esso e la durata è di una manciata di secondi. Il file ECCEZIONI dovrà riportare per ogni riga il path assoluto del file o il della directory da eliminare dalla ricerca.

Per mia abitudine preferisco avere un file contenente la storia di ciò che ho trovato, poi ogni tanto lo ripulisco a mano. Di conseguenza ho inserito il passo che inserisce un marcatore e il giorno in cui ha girato lo script.

Preferisco avere una segnalazione anche se non ci sono movimenti da segnalare, ciò mi da la conferma che lo script ha girato correttamente, una sorta del controllo sul controllo, quindi ho inserito il passo in cui scrivo nel file do non avere trovato nulla di anomalo, come esercizio di stile ho voluto inserire in questo commento anche il nome della directory padre esaminata ed il nome del sistema su cui ha girato lo script-

La segnalazione la invio via email, per far ciò utilizzo il buon vecchio sendmail di Unix , ciò non toglie che si potrebbero usare chissà quanti altri metodi per inviare email o eseguire segnalazioni.

Lo script gira in automatico tutte le mattine, poco prima che io entro al lavoro, appena arrivo controllo le email, guardo il file di log che mi è arrivato ... e mi risparmio un sacco di tempo nell'effettuare i controlli manualmente, mi rimane il tempo per prendermi il caffè tranquillamente, se non ho riscontrato anomalie.