122 lines
3.1 KiB
Bash
Executable File
122 lines
3.1 KiB
Bash
Executable File
#!/bin/sh
|
|
|
|
if [ -z "$1" ]
|
|
then
|
|
sync_freq_hours=24
|
|
else
|
|
sync_freq_hours=$1
|
|
fi
|
|
readonly sync_freq_hours
|
|
|
|
if [ -z "$2" ]
|
|
then
|
|
backup_dir=/backups/borg/
|
|
else
|
|
backup_dir=$2
|
|
fi
|
|
readonly backup_dir
|
|
|
|
# Exit if no backup directory exists
|
|
if [ ! -d "$backup_dir" ]; then
|
|
echo "Specified backup directory ($backup_dir) does not exist."
|
|
echo "Provide a valid directory."
|
|
exit 2
|
|
fi
|
|
|
|
if [ -z "$3" ]
|
|
then
|
|
log_dir=/backups/log/
|
|
else
|
|
log_dir=$3
|
|
fi
|
|
readonly log_dir
|
|
|
|
if [ ! -d "$log_dir" ]; then
|
|
echo "Specified log directory ($log_dir) does not exist."
|
|
echo "Provide a valid log directory."
|
|
exit 2
|
|
fi
|
|
|
|
if [ -z "$4" ]
|
|
then
|
|
log_file_prefix=$(cat /proc/sys/kernel/hostname)-sync-all-
|
|
else
|
|
log_file_prefix=$4
|
|
fi
|
|
readonly log_file_prefix
|
|
|
|
# if borg is currently running - stop sync
|
|
if [ $(pidof borg | wc -w) -eq 1 ]
|
|
then
|
|
echo "Backup is currently in process - exiting sync."
|
|
exit 2
|
|
fi
|
|
|
|
# set up log file
|
|
log_file_name="$log_file_prefix$(date +%d%m%Y-%H%M%S)"
|
|
log_file_path="$log_dir$log_file_name"
|
|
readonly log_file_name
|
|
readonly log_file_path
|
|
|
|
# check log files to determine if a successful sync happened in last 24 hours
|
|
sync_freq_minutes=$(($sync_freq_hours * 60))
|
|
if [ $(find $log_dir -name "$log_file_prefix*" -mmin -$sync_freq_minutes -exec awk 'END {print $NF}' {} \; | grep 0 | wc -l) -gt 0 ]
|
|
then
|
|
echo "Sync was successfully run within last $sync_freq_hours hours."
|
|
echo "Sync would exit now without doing anything."
|
|
exit 0
|
|
fi
|
|
|
|
# some helpers and error handling:
|
|
info() { printf "\n%s %s\n\n" "$( date )" "$*" &>> $log_file_path; }
|
|
trap 'echo $( date ) Sync interrupted &>> $log_file_path; exit 2' INT TERM
|
|
|
|
info "Starting sync to pcloud over rclone"
|
|
|
|
sync_target=mega-gmail
|
|
sync_target_dir=DesktopBackups/Manjaro/
|
|
|
|
rclone copy \
|
|
borg-local:$backup_dir \
|
|
$sync_target:$sync_target_dir \
|
|
--checksum \
|
|
--delete-after \
|
|
--verbose \
|
|
--log-file $log_file_path \
|
|
|
|
# mega-sync $backup_dir $sync_target_dir -vv
|
|
|
|
sync_exit=$?
|
|
|
|
info "Syncing Log Files"
|
|
|
|
rclone copy \
|
|
borg-local:$log_dir \
|
|
$sync_target:$sync_target_dir"backup-logs" \
|
|
--checksum \
|
|
--delete-after \
|
|
--local-no-check-updated \
|
|
--verbose \
|
|
--exclude $log_file_name \
|
|
--log-file $log_file_path \
|
|
|
|
# mega-sync $log_dir $sync_target_dir"backup-logs" -vv
|
|
|
|
log_sync_exit=$?
|
|
|
|
# use highest exit code as global exit code
|
|
global_exit=$(( sync_exit > log_sync_exit ? sync_exit : log_sync_exit ))
|
|
|
|
if [ ${global_exit} -eq 1 ];
|
|
then
|
|
echo "Backup Sync and/or Log Sync finished with a warning" &>> $log_file_path
|
|
fi
|
|
|
|
if [ ${global_exit} -gt 1 ];
|
|
then
|
|
echo "Backup Sync and/or Log Sync finished with an error" &>> $log_file_path
|
|
fi
|
|
|
|
echo Sync status - $global_exit &>> $log_file_path
|
|
|
|
exit ${global_exit} |