Eliminazione di files più vecchi di x giorni —
Come dicevo in un altro scritto l’occupazione di spazio è un reale problema specie se l’utente che produce files e in questo caso di grosse dimensioni non è un utente “umano” ma un utente macchina.
L’utente sqlsa (gestionale) produce ogni giorno due files che ad oggi sono in totale 35 GB ma che sono destinati ad aumentare.
La politica di conservazione originale prevedeva una ritenzione di 10 giorni, quando la dimensione ha cominciato a diventare importante abbiamo pensato di tagliarla a 5 anche perché a monte conserviamo i backup di 20 giorni quindi tutto sommato siamo coperti comunque.
La situazione per la generazione e il salvataggio di questi due files non è lineare ma il risultato ultimo è che i files vengono salvati in questo path sul server share
/home/HOME/sqlsa/full_backup
in questa directory viene generata un’altra subdirectory con il nome anno (2025) ce contiene a sua volta 12 subdir con il nome del mese.
Si tratta quindi di spostare nel nuovo giusto path i due files, e di cancellare i files più vecchi di 5 giorni.
Di seguito lo script che messo in crontab ogni giorno alle 5 esegue quanto serve:
#! /bin/bash -x
### ottieni la data corrente
ANNO=$( date +%G )
MESE_CORRENTE=$( date +%b )
GIORNO=$( date +%d )
### Se è il primo giorno del mese, usa il mese precedente
if [ “$GIORNO” = “01” ]; then
# Ottieni il mese precedente (formato Mmm)
MESE=$(date -d “1 month ago” +%b)
# Se siamo a gennaio, dobbiamo anche decrementare l’anno
if [ “$MESE_CORRENTE” = “gen” ]; then
ANNO=$((ANNO – 1))
fi
else
MESE=$MESE_CORRENTE
fi
### Crea la directory se non esiste
mkdir -p “/home/HOME/sqlsa/full_backup/$ANNO/$MESE”
### Spostati nella directory e sposta i file
cd “/home/HOME/sqlsa/full_backup/$ANNO/$MESE” || exit 1
pwd
mv ../../*.bak .
### Elimina i file più vecchi di 5 giorni
cd ..
find . -type f -iname “*.bak” -mtime +5 -exec rm -rf {} \;
exit 0
Categorised as: Linux | Script | Work
Comments are disabled on this post