57 lines
1.3 KiB
Bash
57 lines
1.3 KiB
Bash
#!/bin/bash
|
|
set -euo pipefail
|
|
|
|
SRC="/opt/redmine/redmine_files"
|
|
BASE="/var/backups/tscale01/redmine_files"
|
|
PREFIX="redmine_files"
|
|
KEEP=3
|
|
|
|
LOG="/var/log/backup-redmine-files.log"
|
|
LOCK="/var/lock/redmine-files-backup.lock"
|
|
|
|
timestamp="$(date '+%Y%m%d_%H%M%S')"
|
|
DEST="${BASE}/${PREFIX}-${timestamp}"
|
|
|
|
log() {
|
|
printf "%s %s\n" "$(date '+%Y-%m-%d %H:%M:%S')" "$1" | tee -a "$LOG"
|
|
}
|
|
|
|
cleanup() {
|
|
rm -f "$LOCK"
|
|
}
|
|
trap cleanup EXIT
|
|
|
|
# Lock semplice
|
|
if ! ( set -o noclobber; echo "$$" > "$LOCK" ) 2>/dev/null; then
|
|
log "ERRORE: un'altra istanza è in esecuzione."
|
|
exit 1
|
|
fi
|
|
|
|
# Verifiche base
|
|
[ -d "$SRC" ] || { log "ERRORE: sorgente $SRC inesistente"; exit 1; }
|
|
mkdir -p "$BASE"
|
|
mkdir -p "$DEST"
|
|
|
|
log "Inizio snapshot → $DEST"
|
|
|
|
rsync -a --delete "$SRC"/ "$DEST"/
|
|
|
|
log "Snapshot completato."
|
|
|
|
# Retention per numero: tieni gli ultimi $KEEP, cancella il resto
|
|
log "Avvio retention: mantengo ultimi $KEEP snapshot."
|
|
|
|
# Lista directory in ordine dal più recente al più vecchio
|
|
snapshots=( $(ls -1dt "${BASE}/${PREFIX}-"* 2>/dev/null || true) )
|
|
|
|
if [ "${#snapshots[@]}" -gt "$KEEP" ]; then
|
|
to_delete=( "${snapshots[@]:$KEEP}" )
|
|
for dir in "${to_delete[@]}"; do
|
|
log "Elimino snapshot vecchio: $dir"
|
|
rm -rf -- "$dir"
|
|
done
|
|
fi
|
|
|
|
log "Retention completata."
|
|
exit 0
|