bundlewrap/bundles/backup-client/files/generate-backup

74 lines
2.0 KiB
Bash

#!/bin/bash
statusfile=/var/tmp/backup.monitoring
ssh_login="${username}@${server}"
ssh_cmnd="ssh -o IdentityFile=/etc/backup.priv -o StrictHostKeyChecking=accept-new -p ${port}"
<%text>
NL=$'\n'
if ! [[ -f /etc/backup.priv ]]
then
echo "/etc/backup.priv does not exist" | logger -t backup-client -p user.error
echo "abort_no_key" > "$statusfile"
exit 1
fi
run-parts --exit-on-error -- /etc/backup-pre-hooks.d
exitcode=$?
if [[ $exitcode != 0 ]]
then
echo "run-parts /etc/backup-pre-hooks.d exited $exitcode" | logger -t backup-client -p user.error
echo "hook $exitcode" > "$statusfile"
exit 1
fi
do_backup() {
rsync_errorcodes_for_this_path=""
backup_has_successfully_run="no"
for try in {1..5}
do
echo "Backup for '$1', try $try ..." | logger -t backup-client -p user.info
# Compress level 1 is a good compromise between speed and cpu usage.
rsync --compress-level=1 -aAP --numeric-ids --delete --relative \
--rsync-path="/usr/bin/rsync --fake-super" \
-e "$ssh_cmnd" \
"$1" "$ssh_login":backups/
# Exit code 24 means some files have vanished during rsync.
# I don't know why, but this is very common, apparently?
exitcode=$?
echo "Backup for '$1' try $try exited $exitcode" | logger -t backup-client -p user.info
if [[ $exitcode != 0 ]] && [[ $exitcode != 24 ]]
then
rsync_errorcodes_for_this_path+=" $exitcode"
sleep 30
else
backup_has_successfully_run="yes"
break
fi
done
if [[ "$backup_has_successfully_run" != "yes" ]]
then
echo "Backup for '$1' did not succeed!" | logger -t backup-client -p user.error
rsync_errors+="${NL}${1}${rsync_errorcodes_for_this_path}"
fi
}
rsync_errors=""
</%text>
% for path in sorted(paths):
do_backup "${path}"
% endfor
if [[ -n "$rsync_errors" ]]
then
echo "rsync_error$rsync_errors" > "$statusfile"
else
echo "ok" > "$statusfile"
fi