cleanup, some more elegant syntax, include control of restic on yunohost

This commit is contained in:
bilbo baggins 2024-06-25 17:04:18 +02:00
parent d96bb981dc
commit 97e4087cbf

View File

@ -4,35 +4,39 @@
TARGET=/yunohost-backups TARGET=/yunohost-backups
HOST=yunohost HOST=yunohost
TODAY_DATE=`date '+%F'` TODAY_DATE=$(date '+%F')
LOGFILE=${TARGET}/$TODAY_DATE.$$.log LOGFILE=${TARGET}/$TODAY_DATE.$$.log
ERR=0 ERR=0
NUMRETAINBACKUPS=10 NUMRETAINBACKUPS=10
echo "yunohost backup begin:" >$LOGFILE echo "yunohost backup begin $(date):" >$LOGFILE
date >>$LOGFILE #date >>$LOGFILE
# delete max. 3 old backups per run # delete max. 3 old backups per run
for i in 1 2 3 for i in 1 2 3
do do
NUMBACKUPS=`ssh ${HOST} sudo yunohost backup list | grep -- '-' | wc -l` NUMBACKUPS=$(ssh ${HOST} sudo yunohost backup list | grep -- '-' | wc -l) || { echo yunohost could not list backups $(date) >>$LOGFILE ; exit 1; }
ERR=$? # ERR=$?
if [ ${ERR} -ne 0 ] # if [ ${ERR} -ne 0 ]
then # then
echo yunohost could not list backups >>$LOGFILE # echo yunohost could not list backups >>$LOGFILE
date >>$LOGFILE # date >>$LOGFILE
exit 1 # exit 1
fi # fi
if [ ${NUMBACKUPS} -gt ${NUMRETAINBACKUPS} ] if [ ${NUMBACKUPS} -gt ${NUMRETAINBACKUPS} ]
then then
BACKTODEL=`ssh ${HOST} sudo yunohost backup list | grep -- '-' | head -1 | cut -d" " -f4` BACKTODEL=$(ssh ${HOST} sudo yunohost backup list | grep -- '-' | head -1 | cut -d" " -f4)
echo 'the following backup will be deleted:' >>$LOGFILE 2>&1 echo 'the following backup will be deleted on ${HOST}:' &>>$LOGFILE
ssh ${HOST} sudo yunohost backup info ${BACKTODEL} >>$LOGFILE 2>&1 ssh ${HOST} sudo yunohost backup info ${BACKTODEL} &>>$LOGFILE
ssh ${HOST} "sudo yunohost backup delete ${BACKTODEL}" >>$LOGFILE 2>&1 ssh ${HOST} "sudo yunohost backup delete ${BACKTODEL}" &>>$LOGFILE
fi fi
done done
ssh ${HOST} sudo yunohost backup create >>$LOGFILE 2>&1 # It's hightly recommended to make your backup when the service is stopped. Please stop gitea service with this command before to run the backup 'systemctl stop gitea.service'
echo "stopping gitea service on ${HOST}" &>>$LOGFILE
ssh ${HOST} sudo systemctl stop gitea.service &>>$LOGFILE
ssh ${HOST} sudo yunohost backup create &>>$LOGFILE
ERR=$? ERR=$?
if [ ${ERR} == 0 ] if [ ${ERR} == 0 ]
then then
@ -40,13 +44,24 @@ then
else else
echo yunohost backup did NOT complete >>$LOGFILE echo yunohost backup did NOT complete >>$LOGFILE
fi fi
echo "starting gitea service on ${HOST}" &>>$LOGFILE
ssh ${HOST} sudo systemctl start gitea.service &>>$LOGFILE
echo "yunohost backup ended:" >>$LOGFILE echo "yunohost backup ended:" >>$LOGFILE
date >>$LOGFILE date >>$LOGFILE
BACKUPFILE=`ssh ${HOST} sudo yunohost backup list --with-info -H | grep -A 3 $TODAY_DATE | grep 'path:' | cut -d":" -f2 | tr -d " " | tail -1` BACKUPFILE=$(ssh ${HOST} sudo yunohost backup list --with-info -H | grep -A 3 $TODAY_DATE | grep 'path:' | cut -d":" -f2 | tr -d " " | tail -1)
scp ${HOST}:${BACKUPFILE} ${TARGET} && echo ${BACKUPFILE} successfully copied to ${TARGET}! >>$LOGFILE 2>&1 scp ${HOST}:${BACKUPFILE} ${TARGET} && echo "${BACKUPFILE} successfully copied to ${TARGET}!" &>>$LOGFILE || echo "error when trying to scp ${BACKUPFILE} to ${TARGET}!" &>>$LOGFILE
ls -lisah ${TARGET}/`basename ${BACKUPFILE}` >>$LOGFILE ls -lisah ${TARGET}/`basename ${BACKUPFILE}` >>$LOGFILE
gzip -9 ${TARGET}/`basename ${BACKUPFILE}` >>$LOGFILE 2>&1 gzip -9 ${TARGET}/`basename ${BACKUPFILE}` &>>$LOGFILE
ls -lisah ${TARGET}/`basename ${BACKUPFILE}`.gz &>>$LOGFILE
source /root/.bashrc
echo restic backup on ${HOST} at $(date) &>>${LOGFILE}
#ssh ${HOST} sudo { source /root/.bashrc ; /usr/bin/restic backup /home/yunohost.backup/archives ; } &>>$LOGFILE
ssh ${HOST} "sudo /root/bin/restic.sh" &>>$LOGFILE
restic check --read-data-subset 20% &>>$LOGFILE
restic stats &>>$LOGFILE
rclone about onedrive_b2: &>>$LOGFILE
# algo to create the "keep"-array copied from https://serverfault.com/questions/575163/how-to-keep-daily-backups-for-a-week-weekly-for-a-month-monthly-for-a-year-a # algo to create the "keep"-array copied from https://serverfault.com/questions/575163/how-to-keep-daily-backups-for-a-week-weekly-for-a-month-monthly-for-a-year-a
# it keeps 8 daily backups and 5 weekly (every sunday) backups # it keeps 8 daily backups and 5 weekly (every sunday) backups
@ -75,8 +90,8 @@ for i in {0..5}; do
((keep[$(date +%Y%m%d -d "sunday-$DW weeks")]++)) ((keep[$(date +%Y%m%d -d "sunday-$DW weeks")]++))
done done
#echo ${!keep[@]} #echo ${!keep[@]}
echo space in filesys of ${TARGET} before pruning backups >>$LOGFILE 2>&1 echo space in filesys of ${TARGET} before pruning backups &>>$LOGFILE
df -h ${TARGET} >>$LOGFILE 2>&1 df -h ${TARGET} &>>$LOGFILE
for i in *.tar.gz for i in *.tar.gz
do do
DATE=`echo $i | cut -c1-8` DATE=`echo $i | cut -c1-8`
@ -84,13 +99,14 @@ do
if [ $? -ne 0 ] if [ $? -ne 0 ]
then then
echo pwd `pwd` echo pwd `pwd`
echo deleting $DATE >>$LOGFILE 2>&1 echo deleting $DATE &>>$LOGFILE
rm ${DATE}*.tar.* >>$LOGFILE 2>&1 rm ${DATE}*.tar.* &>>$LOGFILE
rm ${DATE}*.log.* >>$LOGFILE 2>&1 rm ${DATE}*.log.* &>>$LOGFILE
fi fi
done done
echo space in filesys of ${TARGET} after pruning backups >>$LOGFILE 2>&1 echo space in filesys of ${TARGET} after pruning backups &>>$LOGFILE
df -h ${TARGET} >>$LOGFILE 2>&1 df -h ${TARGET} &>>$LOGFILE
echo "$0 on `hostname` ended:" >>$LOGFILE echo "$0 on `hostname` ended:" >>$LOGFILE
date >>$LOGFILE date >>$LOGFILE
# Achtung, hier wird es kompliziert :) nach diesem Kommando keine Umleitung in $LOGFILE mehr # Achtung, hier wird es kompliziert :) nach diesem Kommando keine Umleitung in $LOGFILE mehr