cronjob – Paolo Redaelli https://monodes.com/predaelli A civil engineer with a longlife fondness for Software Libero Fri, 15 May 2020 07:53:12 +0000 en-US hourly 1 https://wordpress.org/?v=6.7.2 91795679 Copie intelligenti https://monodes.com/predaelli/2020/05/15/copie-intelligenti/ https://monodes.com/predaelli/2020/05/15/copie-intelligenti/#respond Fri, 15 May 2020 18:36:36 +0000 https://monodes.com/predaelli/?p=7217 Mi è sempre piaciuta l’idea di avere copie “intelligenti”, ossia

  • una copia al giorno per una settimana
  • una copia alla settimana per un mese
  • una copia al mese per un anno
  • una copia all’anno per la parte vecchia.

E mi son sempre arrovellato su come implementarlo nel mio umile scriptino bash con cui facevo alcune copie di sicurezza. 1

E la pigrizia vinceva e mi tenevo solo gli ultimi due. Poi, complice una quasi perdita di dati 2durante la serrata per l’emergenza sanitaria mi sono accorto che esistono arnesi (strumenti, o “tool”) come rdiff-backup che offrono contemporaneamente una copia intera dell’ultima versione dei dati e retrodifferenze che permettono di ricostruire la storia dei backup.

E non so più cosa usare, tipo asino di buridano. Perché l’idea di rdiff-backup è davvero valida, ma non ti permette di mantere uno storico “selettivo” come piacerebbe a me. Tanto più che c’è un modo facilissimo per ottenere quelle copie intelligenti (vedi How to keep: daily backups for a week, weekly for a month, monthly for a year, and yearly after that ): basta tenere separata in una cartella diversa ogni categoria (quotidiana, settimanale, mensile, annuale). Così:

  • Every day:
    • make a backup, put into daily directory
    • remove everything but the last 7 daily backups
  • Every week:
    • make a backup, put into weekly directory
    • remove everything but the last 5 weekly backups
  • Every month:
    • make a backup, put into monthly directory
    • remove everything but the last 12 monthly backups
  • Every year:
    • make a backup, put into yearly directory

Cavolo, è l’uovo di Colombo! Roba che si implementa con un cronjob da 4 righe ed uno script bash che si fa prima a leggerlo che a spiegarlo!

@daily /home/paolo/bin/copie-qualita.sh quotidiane
@weekly /home/paolo/bin/copie-qualita.sh settimanali
@monthly /home/paolo/bin/copie-qualita.sh mensili
@yearly /home/paolo/bin/copie-qualita.sh annuali
#!/bin/bash

QUALITA=/home/qualita
QNAP=/mnt/qnap/Public

QUOTIDIANE=$QNAP/Calcestruzzo/qualita/quotidiane
SETTIMANALI=$QNAP/Calcestruzzo/qualita/settimanali
MENSILI=$QNAP/Calcestruzzo/qualita/mensili
ANNUALI=$QNAP/Calcestruzzo/qualita/annuali

case $FREQUENZA in
  quotidiane)
    DESTINAZIONE=$QUOTIDIANE/qualita-$( date +%F ).tar.bz2 
    DELENDA=$QUOTIDIANE
    MANTENENDA=7
    ;;
  settimanali)
    DESTINAZIONE=$SETTIMANALI/qualita-$(date +%F).tar.bz2 
    DELENDA=$SETTIMANALI
    MANTENENDA=4
     ;;
  mensili)
    DESTINAZIONE=$MENSILI/qualita-$(date +%F).tar.bz2 
    DELENDA=$MENSILI
    MANTENENDA=12
     ;;
  annuali)
    DESTINAZIONE=$ANNUALI/qualita-$(date +%F).tar.bz2 
    ;;
  *)
    echo "Usage: $0 (quotidiane|settimanali|mensili|annuali)"
    exit 5
esac

echo Copie $FREQUENZA da $QUALITA a $DESTINAZIONE
mount $QNAP && 
  tar --auto-compress --create --file $DESTINAZIONE $QUALITA/* &&
  if [[ $FREQUENZA != "annuali" ]]
  then
    echo In $DELENDA conservo gli ultimi $MANTENENDA file
    rm --verbose --force $( ls $DELENDA | head --lines=-$MANTENENDA )
  fi

Poi Va bene, va bene, i percorsi sono codificati nello script e non in un file di configurazione. Ma accipuffa, in prima battuta l’avevo scritta in una riga!

mount $QNAP &&  tar --auto-compress --create --file $DESTINAZIONE $QUALITA/* &&  rm --verbose --force $( ls $DELENDA | head --lines=-$MANTENENDA )

Credo che per un po’ lo affiancherò a rdiff-backup

1    (che poi nemmeno era uno scriptino, ma addirittura una riga di cron! mount $QNAP; if cd $QNAP/Calcestruzzo/;then mv qualita.tar.bz2 qualita.old.tar.bz2; tar -acf qualita.tar.bz2 $QUALITA/*; else echo Errore;fi )
2    (una pirlata da pivello totale da cui mi son salvato solo perché prima della serrata ho fatto su un disco esterno delle copie manuali del tutto)
]]>
https://monodes.com/predaelli/2020/05/15/copie-intelligenti/feed/ 0 7217