fixed log pruning

This commit is contained in:
Eric Lay 2023-06-29 19:05:25 -05:00
parent af42157ec6
commit dc2256b2d4
2 changed files with 28 additions and 20 deletions

View File

@ -1,20 +1,19 @@
#!/bin/sh #!/bin/sh
# Setting this, so the repo does not need to be given on the commandline: # Setting this, so it can be ported to multiple device easily
machine="$( hostnamectl --static )"
remoteHost="reposerver"
remoteUser="" remoteUser=""
remoteHost="reposerver"
machine="$( hostnamectl --static )"
export BORG_REPO="$remoteUser@$remoteHost:/backup/$machine" export BORG_REPO="$remoteUser@$remoteHost:/backup/$machine"
# See the section "Passphrase notes" for more infos. # See the section "Passphrase notes" for more infos
export BORG_PASSPHRASE='' export BORG_PASSPHRASE=''
# Non-interactively accept relocation of a repository # Non-interactively accept relocation of a repository
export BORG_RELOCATED_REPO_ACCESS_IS_OK=yes export BORG_RELOCATED_REPO_ACCESS_IS_OK=yes
# Some helpers and error handling: # Some helpers and error handling
logPath="/home/ez/.cache/logs/borg" logFile="/home/ez/.cache/logs/borg/$machine-$( date +%Y-%m-%d-%H:%M:%S.%N )"
logFile="$logPath/$( date +%Y-%m-%d-%H:%M:%S.%N )"
infoLine() { printf "%s\t%s\n" "$( date +%H:%M:%S )" "$*" | tee -a "$logFile"; } infoLine() { printf "%s\t%s\n" "$( date +%H:%M:%S )" "$*" | tee -a "$logFile"; }
seeLog() { printf "\n%s %s" "$*" "$logFile"; } seeLog() { printf "\n%s %s" "$*" "$logFile"; }
trap 'echo $( date ) Backup interrupted >&2; exit 2' INT TERM trap 'echo $( date ) Backup interrupted >&2; exit 2' INT TERM
@ -27,9 +26,9 @@ notify() {
dialog_kind='information' dialog_kind='information'
fi fi
for u in $(users); do for u in $(users); do
sudo -u "$u" DISPLAY=:0 \ sudo -u "$u" DISPLAY=:0
DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/"$(sudo -u "$u" id -u)/bus" \ DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/"$(sudo -u "$u" id -u)/bus" \
notify-send -a 'luky-borg-backup' "$1" "$2" --icon="dialog-$dialog_kind" notify-send --app-name="Borg Backup" "$1" "$2" --icon="dialog-$dialog_kind"
done done
fi fi
} }
@ -38,12 +37,17 @@ notify() {
tidyLogs() { tidyLogs() {
mapfile -t removeList < <(grep -w "^Pruning archive" "$logFile" | awk '{ print $4 }' ) mapfile -t removeList < <(grep -w "^Pruning archive" "$logFile" | awk '{ print $4 }' )
for ((i=0; i<${#removeList[@]}; i++)); do for ((i=0; i<${#removeList[@]}; i++)); do
rm "$logPath/${removeList[i]}" # Expand path of logFile
# Slice off the current backup name
# Slice off seconds from timestamp
# Use wildcard to match the rest for matching filenames easily
set -- "${logFile%/*}"/"${removeList[i]%:*}"*
rm "$@"
done done
} }
# Backup the most important directories into an archive named after # Backup the most important directories into an archive named after
# the machine this script is currently running on: # the machine this script is currently running on
notify info "Starting backup to $BORG_REPO" notify info "Starting backup to $BORG_REPO"
infoLine "Starting backup to $BORG_REPO" infoLine "Starting backup to $BORG_REPO"
@ -90,7 +94,7 @@ backup_exit=$?
# Use the `prune` subcommand to maintain 7 daily, 4 weekly and 6 monthly # Use the `prune` subcommand to maintain 7 daily, 4 weekly and 6 monthly
# archives of THIS machine. The '{hostname}-*' matching is very important to # archives of THIS machine. The '{hostname}-*' matching is very important to
# limit prune's operation to this machine's archives and not apply to # limit prune's operation to this machine's archives and not apply to
# other machines' archives also: # other machines' archives also
notify info "Pruning repository" notify info "Pruning repository"
infoLine "Pruning repository" infoLine "Pruning repository"

View File

@ -1,10 +1,10 @@
#!/bin/sh #!/bin/sh
# Setting this, so the repo does not need to be given on the commandline: # Setting this, so it can be ported to multiple device easily
remoteUser=""
remoteHost="reposerver"
machine="$( hostnamectl --static )" machine="$( hostnamectl --static )"
#remoteHost="" export BORG_REPO="$remoteUser@$remoteHost:/backup/$machine"
#remoteUser=""
export BORG_REPO="/backup/$machine"
# See the section "Passphrase notes" for more infos. # See the section "Passphrase notes" for more infos.
export BORG_PASSPHRASE='' export BORG_PASSPHRASE=''
@ -12,9 +12,8 @@ export BORG_PASSPHRASE=''
# Non-interactively accept relocation of a repository # Non-interactively accept relocation of a repository
export BORG_RELOCATED_REPO_ACCESS_IS_OK=yes export BORG_RELOCATED_REPO_ACCESS_IS_OK=yes
# some helpers and error handling: # Some helpers and error handling
logPath="/home/ez/.cache/logs/borg" logFile="/home/ez/.cache/logs/borg/$machine-$( date +%Y-%m-%d-%H:%M:%S.%N )"
logFile="$logPath/$( date +%Y-%m-%d-%H:%M:%S.%N )"
infoLine() { printf "%s\t%s\n" "$( date +%H:%M:%S )" "$*" | tee -a "$logFile"; } infoLine() { printf "%s\t%s\n" "$( date +%H:%M:%S )" "$*" | tee -a "$logFile"; }
seeLog() { printf "\n%s %s" "$*" "$logFile"; } seeLog() { printf "\n%s %s" "$*" "$logFile"; }
trap 'echo $( date ) Backup interrupted >&2; exit 2' INT TERM trap 'echo $( date ) Backup interrupted >&2; exit 2' INT TERM
@ -23,7 +22,12 @@ trap 'echo $( date ) Backup interrupted >&2; exit 2' INT TERM
tidyLogs() { tidyLogs() {
mapfile -t removeList < <(grep -w "^Pruning archive" "$logFile" | awk '{ print $4 }' ) mapfile -t removeList < <(grep -w "^Pruning archive" "$logFile" | awk '{ print $4 }' )
for ((i=0; i<${#removeList[@]}; i++)); do for ((i=0; i<${#removeList[@]}; i++)); do
rm "$logPath/${removeList[i]}" # Expand path of logFile
# Slice off the current backup name
# Slice off seconds from timestamp
# Use wildcard to match the rest for matching filenames easily
set -- "${logFile%/*}"/"${removeList[i]%:*}"*
rm "$@"
done done
} }