Shell Script: backup dels repositoris de subversion

Reading time: 2 – 2 minutes

La setmana passada vaig fer un petit shell script per fer backup dels repositoris de software del meu servidor. Bàsicament el que fa és mirar a /var/svn/repos quins directoris hi ha. Llavors llença un svnadmin dump i al mateix temps comprimeix amb bzip2 la sortida cap a un fitxer, després aquest fitxer es guarda a /home/backup/subversion que és una unitat de xarxa montada per fer backups en el servidor. L’últim detall que em fa falta comentar és que després de fer la còpia del fitxer, deixa 3 fitxers de cada repositori al directori de backup i la resta els borra. D’aquesta forma tinc 3 còpies de cada un dels repositoris, una d’ahir, l’altre d’abans d’ahir i finalment una de fa 3 dies. Així si passa algún desastre d’incosistència o algo semblant tinc més marge per recuperar el repositori.

Veureu que el codi és molt simple i si algú el vol adaptar no crec que li costi gaire, tot esta programat amb ordres típiques, sense comandes rares ni res. Finalment l’únic que he hagut de fer és posar-lo al cron a alguna hora de matinada.

#!/bin/sh
BASE="/var/svn/repos"
DATA=`date "+%Y%m%d"`
cd $BASE
REPOSS=`find . -maxdepth 1 -mindepth 1 -type d | cut -f 2 -d "/"`
BACKUPDIR="/home/backup/subversion"
for REPOS in $REPOSS
do
        BACKUPFITXER=backup-repos-$REPOS
        FITXER=$BACKUPFITXER-$DATA.dump.bz2
        echo -n "Starting $REPOS backup..."
        svnadmin dump -q $BASE/$REPOS | bzip2 > $FITXER 2>/dev/null
        mv $FITXER $BACKUPDIR
        cd $BACKUPDIR
        rm -f `ls -t $BACKUPFITXER* | sed -e 1,3d` 2> /dev/null
        echo "OK"
        cd $BASE
done