foxBackup/backup.sh

150 lines
3.4 KiB
Bash
Raw Normal View History

2021-11-02 08:05:23 +00:00
#!/bin/bash
ABSOLUTE_FILENAME=`readlink -e "$0"`
DIRECTORY=`dirname "$ABSOLUTE_FILENAME"`
source ${DIRECTORY}/config
2021-12-12 11:19:30 +00:00
stamp=`date +%s`-`date +"%Y%m%d-%H%M%S-I"`
2021-11-02 08:05:23 +00:00
do_full=""
do_quet=0
while getopts "fq" opt; do
case $opt in
f) do_full=1;;
q) do_quet=1;;
# -f -full
# -q -quet (no verbose output)
esac
done
if [ -n "${do_full}" ]
then
if [ "${do_quet}" == 0 ]
then
echo "Full backup started"
fi
2021-12-12 11:19:30 +00:00
stamp=`date +%s`-`date +"%Y%m%d-%H%M%S-F"`
2021-11-02 08:05:23 +00:00
rm -f ${prefix}/incremental/*
fi
if [ ! -d "${prefix}/incremental" ]; then
# Создать папку, только если ее не было
mkdir ${prefix}/incremental
fi
if [ ! -d "${prefix}/compressed" ]; then
# Создать папку, только если ее не было
mkdir ${prefix}/compressed
fi
mkdir ${prefix}/${stamp}
# SQL DB Backup
for sql_item in ${sql_list}
do
if [ "${do_quet}" == 0 ]
then
echo -n "Collecting database ${sql_item//:/ }...."
fi
#${sqldump_prefix} ${sql_item//:/ } | gzip > ${prefix}/${stamp}/${sql_item//:/.}.sql.gz
2023-06-21 08:19:04 +00:00
if [[ -f "${prefix}/incremental/${sql_item//:/.}.sql.sign" ]]
2021-11-02 08:05:23 +00:00
then
xsuffix=".diff"
2023-06-21 08:11:54 +00:00
${sqldump_prefix} ${sql_item//:/ } | rdiff delta ${prefix}/incremental/${sql_item//:/.}.sql.sign > ${prefix}/${stamp}/${sql_item//:/.}.sql.delta
2021-11-02 08:05:23 +00:00
else
${sqldump_prefix} ${sql_item//:/ } | cat > ${prefix}/${stamp}/${sql_item//:/.}.sql
2023-06-21 08:11:54 +00:00
rdiff signature ${prefix}/${stamp}/${sql_item//:/.}.sql > ${prefix}/incremental/${sql_item//:/.}.sql.sign
2021-11-02 08:05:23 +00:00
fi
if [ "${do_quet}" == 0 ]
then
echo "OK"
fi
done
#Archiving SQL for DIFF
#Files Full Backup
for file_item in ${files_list}
do
xfolder=`echo ${file_item} | awk -F : '{ print $1 }'`
if [[ -n "`echo ${file_item} | awk -F : '{ print $2 }'`" ]]
then
xsubfolders=`echo ${file_item} | sed -e 's/^[^:]*://'`
else
xsubfolders="*"
fi
if [ "${do_quet}" == 0 ]
then
echo -n "Collecting folder ${xfolder}...."
fi
if [[ -f "${prefix}/incremental/${xfolder////_}.snar" ]]
then
cp ${prefix}/incremental/${xfolder////_}.snar ${prefix}/incremental/${xfolder////_}.snar.diff
xsuffix=".diff"
else
xsuffix=""
fi
cd ${xfolder} && tar -c --listed-incremental=${prefix}/incremental/${xfolder////_}.snar${xsuffix} -f ${prefix}/${stamp}/${xfolder////_}${xsuffix}.tar ${xsubfolders//:/ }
rm -f ${prefix}/incremental/${xfolder////_}.snar.diff
if [ "${do_quet}" == 0 ]
then
echo "OK"
fi
done
# Compressing
2022-06-05 12:15:39 +00:00
if [ "${do_quet}" == 0 ]
then
echo "Compressing"
fi
find ${prefix}/${stamp} -maxdepth 1 -type f -not -name "*.gz" -exec gzip {} \;
# Encrypting
if [ -n "${gpg_passphrase}" ]
then
if [ "${do_quet}" == 0 ]
then
echo "Encrypting"
fi
find ${prefix}/${stamp} -maxdepth 1 -type f -exec bash -c "echo \"${gpg_passphrase}\" | gpg --batch --passphrase-fd 0 --symmetric \"{}\" && rm -f \"{}\"" \;
fi
if [ "${do_quet}" == 0 ]
then
echo "Packing"
fi
# Packing
cd ${prefix}/${stamp} && tar -cf ${prefix}/compressed/${stamp}.tar *
2021-11-02 08:05:23 +00:00
rm -f $prefix/$stamp/*
rmdir $prefix/$stamp
2022-06-05 12:15:39 +00:00
2021-11-02 08:05:23 +00:00
# Sending data
2021-11-02 09:10:54 +00:00
if [ -n "${sshhost}" ]
then
for xfile_item in `ls ${prefix}/compressed`
do
2022-06-05 21:42:57 +00:00
if [ "${do_quet}" == 0 ]
then
echo "Sending via SSH $xfile_item"
fi
scp -B -P ${sshport} -i ${sshkey} ${prefix}/compressed/${xfile_item} ${sshuser}@${sshhost}:${sshpath} > /dev/null
2021-11-02 09:10:54 +00:00
if [ "$?" == 0 ]
then
rm -f ${prefix}/compressed/${xfile_item}
fi
done
fi
2021-11-02 08:05:23 +00:00