Extend script by deleting old backups

This commit is contained in:
Wolfgang Huß 2023-11-22 16:23:40 +01:00
parent 6af26472c0
commit 864f4344ad
2 changed files with 46 additions and 10 deletions

View File

@ -2,4 +2,6 @@
CONFIGURATION=stage.ocelot.social
# used in "scripts/clusters.cron-backups.sh"
BACKUP_CONFIGURATIONS="stage.ocelot.social stage.yunite.me"
BACKUP_CONFIGURATIONS="stage.ocelot.social stage.wir.social"
# if '<= 0' no backups will be deleted
BACKUP_SAVED_BACKUPS_NUMBER=7

View File

@ -1,43 +1,77 @@
#!/bin/bash
# time stamp
printf "\nMultiple backups started at:\n "
date
# base setup
SCRIPT_PATH=$(realpath $0)
SCRIPT_DIR=$(dirname $SCRIPT_PATH)
# save old CONFIGURATION for later reset
SAVE_CONFIGURATION=$CONFIGURATION
# export all variables in "../.env"
set -a
source ${SCRIPT_DIR}/../.env
set +a
# check BACKUP_CONFIGURATIONS
if [ -z ${BACKUP_CONFIGURATIONS} ]; then
if [[ -z ${BACKUP_CONFIGURATIONS} ]]; then
echo "You must provide a `BACKUP_CONFIGURATIONS` via environment variable"
exit 1
fi
# convert configurations to array
CONFIGURATIONS_ARRAY=($BACKUP_CONFIGURATIONS)
IFS=' ' read -a CONFIGURATIONS_ARRAY <<< "$BACKUP_CONFIGURATIONS"
# display the clusters
echo "Backup the clusters:"
printf "Backup the clusters:\n"
for i in "${CONFIGURATIONS_ARRAY[@]}"
do
echo $i
echo " $i"
done
echo "Cancel by ^C. You have 20 seconds"
echo "Cancel by ^C. You have 15 seconds"
# wait for the admin to react
sleep 20
sleep 15
# save old CONFIGURATION for later reset
SAVE_CONFIGURATION=$CONFIGURATION
printf "\n"
for i in "${CONFIGURATIONS_ARRAY[@]}"
do
CONFIGURATION=$i
# individual cluster backup
${SCRIPT_DIR}/cluster.backup.sh
# deleting backups?
if (( BACKUP_SAVED_BACKUPS_NUMBER >= 1 )); then
# delete all oldest backups, but leave the last BACKUP_SAVED_BACKUPS_NUMBER
keep=$BACKUP_SAVED_BACKUPS_NUMBER
path="$SCRIPT_DIR/../configurations/$CONFIGURATION/backup/"
cd $path
printf "In\n '$path'\n remove:\n"
# TODO: replace 'ls' by 'find . -type d -maxdepth 1'? description: https://unix.stackexchange.com/questions/28939/how-to-delete-the-oldest-directory-in-a-given-directory
while [ `ls -1 | wc -l` -gt $keep ]; do
oldest=`ls -c1 | head -1`
echo " $oldest"
rm -rf $oldest
done
printf "Keep the last %d backups:\n " $BACKUP_SAVED_BACKUPS_NUMBER
ls
cd $SCRIPT_DIR
else
echo "!!! ATTENTION: No backups are deleted !!!"
fi
printf "\n"
done
# reset CONFIGURATION to old
# TODO: clearily if this is the same as: $ export CONFIGURATION=${SAVE_CONFIGURATION}"
CONFIGURATION=$SAVE_CONFIGURATION
echo "Reset to CONFIGURATION=${CONFIGURATION}"
echo "Reset to CONFIGURATION=$CONFIGURATION"