/etc/cron.monthly/backup-manager-clean-upload-db is in backup-manager 0.7.12-4.
This file is owned by root:root, with mode 0o755.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 | #!/bin/bash
# Cron script to cleanup the uploaded archives database from old entries.
# Do not run if backup-manager is not installed, or
# the conf file does not exist or is not readable.
[ -x /usr/sbin/backup-manager ] || exit 0
[ -r /etc/backup-manager.conf ] || exit 0
. /etc/backup-manager.conf
# Do not run if the site admin has not already activated
# the uploaded database or it does not (yet) exist.
[ "X${BM_UPLOADED_ARCHIVES}" != "X" ] || exit 0
[ -f ${BM_UPLOADED_ARCHIVES} ] || exit 0
# Guard against improper configuration values; give sensible defaults.
MINPER=7 # minimum days back of entries to keep
OTHPER=30 # days back of entries to keep for other upload methods
PERIOD=$(expr ${BM_ARCHIVE_TTL} \+ 0 2>/dev/null)
if [ "X${PERIOD}" = "X" ] || [ ${PERIOD} -lt 1 ]; then
PERIOD=${MINPER}
fi
case ${BM_UPLOAD_METHOD} in
scp|ssh-gpg)
if [ "X${BM_UPLOAD_SSH_TTL}" != "X" ]; then
PDIFF=$(expr ${BM_UPLOAD_SSH_TTL} - ${PERIOD} 2>/dev/null)
fi
;;
ftp)
if [ "X${BM_UPLOAD_FTP_TTL}" != "X" ]; then
PDIFF=$(expr ${BM_UPLOAD_FTP_TTL} - ${PERIOD} 2>/dev/null)
fi
;;
s3)
# For S3 we choose a conservative value because there
# is no way to know the time-to-live on the remote host.
PDIFF=$(expr ${OTHPER} - ${PERIOD} 2>/dev/null)
;;
*)
# The upload database is not used in any other method
# than those listed above. Exit silently.
exit 0
;;
esac
# A bad configuration may result in either a null or a negative PDIFF.
# Correct this here.
if [ "X${PDIFF}" = "X" ] || [ ${PDIFF} -lt 0 ]; then
PDIFF=0
fi
PERIOD=$(expr ${PERIOD} \+ ${PDIFF} 2>/dev/null)
PURGE_DATE=$(date "+%Y%m%d" --date ${PERIOD}" days ago")
NEW_UPLOAD_DB=$(mktemp)
if [ $? -ne 0 ]; then
>&2 echo "Error: cannot create temporary file; aborting."
exit 2
fi
# Use backup-manager configuration values for permissions
# removing the executable bits (database is a file).
trap "rm -f ${NEW_UPLOAD_DB}" EXIT
set -e
chown ${BM_REPOSITORY_USER}:${BM_REPOSITORY_GROUP} ${NEW_UPLOAD_DB}
chmod ${BM_REPOSITORY_CHMOD} ${NEW_UPLOAD_DB}
chmod a-x ${NEW_UPLOAD_DB}
set +e
# Now that we have ensured that source and destination exist,
# read in the lines and remove any older than $PURGE_DATE.
while read line; do
archive=$(echo "${line}" | cut -d' ' -f1)
arch_date=$(echo "${archive}" \
| sed -e 's/.*\([0-9][0-9][0-9][0-9][01][0-9][0-3][0-9]\).*/\1/')
# Both days are pure numbers of the form YYYYMMDD. Thus comparison
# can be reduced to a simple numeric comparison (newer is bigger).
if [ ${arch_date} -gt ${PURGE_DATE} ]; then
echo "${line}"
# We do not remove hashes of existing archives, even if older than
# $PURGE_DATE (if it stayed there, it has to be a reason).
elif [ -f ${BM_REPOSITORY_ROOT}/${archive} ]; then
echo "${line}"
fi
done < ${BM_UPLOADED_ARCHIVES} >> ${NEW_UPLOAD_DB}
if [ $? -ne 0 ]; then
>&2 echo "Error parsing BM_UPLOADED_ARCHIVES database; file was not updated"
exit 3
fi
trap - EXIT
# If all went well, replace the database.
if mv ${NEW_UPLOAD_DB} ${BM_UPLOADED_ARCHIVES} ; then
:
else
>&2 echo "Error replacing backup-manager BM_UPLOADED_ARCHIVES with updated values;"
>&2 echo "please check its status (updated file was at: $NEW_UPLOAD_DB)"
exit 4
fi
|