-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathbackup
executable file
·153 lines (123 loc) · 3.32 KB
/
backup
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
#!/bin/ksh
##Potaje6
BACKUPDIR=/home/dmolinao/backups
APP=TS3_Pirata
RETENC=1000000
HOST=analcunt.ddns.net
LUSER=root
SOURCE=/apps/TS3_Server
HORA=+%Y-%m-%d--%H:%M:%S
i=0
NOPURGE=0
trap force_exit SIGINT
force_exit(){
echo
echo "Deleting temp folder"
rm -rvf $BACKUPFULLDIR/temp
exit 3
}
print_uso(){
cat <<EOF
Script para hacer backups
-a carpeta de la aplicacion de la que se quiere hacer backup Default:$APP
-H host Default:$HOST
-u usuario Default:$LUSER
-K key rsa
-b ruta donde se guardaran los backups Default:$BACKUPDIR
-r Retencion, OJO!!!, esta restara a la salida de $(date +%Y%m%d%H%M) el timestamp del backup, para un mes haria falta una retencion de 1000000 Default:$RETENC
-p ejecutar solo la funcion de purgar
-s directorio a descargar del servidor remoto Default:$SOURCE
-h mostrar este mensaje
-np no ejecutar la funcion de purgado de backups viejos al final del script
EOF
}
BACKUPFULLDIR=$BACKUPDIR/$APP
BACKUPTARFILE=$BACKUPFULLDIR/$APP$(date +%Y%m%d%H%M).tar.gz
purge_backups(){
echo "$(date $HORA)--------Comezando proceso de purgado, $i Backups purgados"
ls -1 $BACKUPFULLDIR| sed "s/$APP//" | sed "s/\.tar.gz//" | while read FECHA_BACKUP; do
EXPIRED=$(echo "$(date +%Y%m%d%H%M)-$FECHA_BACKUP" | bc)
if [ "$EXPIRED" -gt "$RETENC" ]; then
# echo "el backup de $APP del día $FECHA_BACKUP ha expirado, borrar?[y,n] "
# read DELETE
# case $DELETE in
# "y") echo "Borrando $BACKUPFULLDIR/$APP$FECHA_BACKUP.tar"
# rm -f $BACKUPFULLDIR/$APP$FECHA_BACKUP.tar
# ;;
# "n") echo "Conservando $BACKUPFULLDIR/$APP$FECHA_BACKUP.tar"
# ;;
# esac
echo "Borrando $BACKUPFULLDIR/$APP$FECHA_BACKUP.tar"
rm -f $BACKUPFULLDIR/$APP$FECHA_BACKUP.tar.gz
i=$(($i+1))
#else
#echo "Backup $BACKUPFULLDIR/$APP$FECHA_BACKUP.tar no expirado"
fi
done
echo "$(date $HORA)--------Finalizado proceso de purgado, $i Backups purgados"
}
while [ $# -gt 0 ];
do
case $1 in
"-a") APP=$2
shift
;;
"-r") RETENC=$2
shift
;;
"-H") HOST=$2
shift
;;
"-u") LUSER=$2
shift
;;
"-K") KEY=$2
shift
;;
"-b") BACKUPDIR=$2
shift
;;
"-s") SOURCE=$2
shift
;;
"-h") print_uso
exit
;;
"-p") purge_backups
exit
;;
"-np") NOPURGE=1
exit
;;
*)
shift
esac
done
if [ ! -d "$BACKUPFULLDIR/temp" ]; then
mkdir -p $BACKUPFULLDIR/temp
fi
#-e '"ssh' -i '../.ssh/key_vps"'
echo "$(date $HORA)--------Recibiendo datos del backup"
if [ ! -z $KEY ]; then
RSA_OPTION=-e
RSA_KEY="ssh -i $KEY "
/usr/bin/rsync -avzh $RSA_OPTION "${RSA_KEY}" $LUSER@$HOST:$SOURCE $BACKUPFULLDIR/temp
DEP=$?
else
/usr/bin/rsync -avzh $LUSER@$HOST:$SOURCE $BACKUPFULLDIR/temp
DEP=$?
fi
if [ $DEP -ne 0 ]; then
echo "Error al recibir los datos, saliendo..."
exit
fi
echo "$(date $HORA)--------Empaquetando datos del backup en $BACKUPTARFILE y borrando carpeta temporal"
tar cvzf $BACKUPTARFILE -C $BACKUPFULLDIR/temp . && rm -rf $BACKUPFULLDIR/temp
if [ $? -ne 0 ]; then
echo "$(date $HORA)--------Error al empaquetar y borrar temporal, saliendo..."
exit
fi
echo "$(date $HORA)--------backup creado de $LUSER@$HOST:$SOURCE $BACKUPTARFILE"
if [ "$NOPURGE" -ne 1 ]; then
purge_backups
fi