centos

centos liboffice备份策略

小樊
41
2025-12-31 11:08:49
栏目: 智能运维

CentOS 上 LibreOffice 备份策略

一 备份范围与原则

二 工具与命令示例

三 推荐备份策略与保留

四 恢复流程与验证

五 自动化脚本与注意事项

#!/usr/bin/env bash
set -Eeuo pipefail

SRC_DIR="$HOME/Documents/liboffice"
BACKUP_BASE="$HOME/Backup/liboffice"
LOG_FILE="$BACKUP_BASE/backup_libreoffice.log"

DATE=$(date +%F)
WEEK_DAY=$(date +%u)  # 1-7, Monday=1
KEEP_DAYS=7
KEEP_WEEKS=4
KEEP_MONTHS=12

mkdir -p "$BACKUP_BASE"

log() {
  echo "$(date '+%F %T') $*" | tee -a "$LOG_FILE"
}

# 0 2 * * * daily rsync incremental
do_rsync() {
  local DST="$BACKUP_BASE/incr/$DATE"
  mkdir -p "$DST"
  rsync -a -v --delete "$SRC_DIR/" "$DST/" >> "$LOG_FILE" 2>&1
  log "RSYNC incremental -> $DST"
}

# 0 3 * * 0 weekly full tar
do_tar_full() {
  local ARC="$BACKUP_BASE/full/liboffice_full_$DATE.tar.gz"
  mkdir -p "$(dirname "$ARC")"
  tar -c -z -f "$ARC" -C "$SRC_DIR" . >> "$LOG_FILE" 2>&1
  log "TAR full -> $ARC"
}

# retention: days/weeks/months
do_retention() {
  # daily
  find "$BACKUP_BASE/incr" -maxdepth 1 -type d -mtime +$KEEP_DAYS -print0 | xargs -0 rm -rf
  # weekly: keep last KEEP_WEEKS Sundays
  find "$BACKUP_BASE/full" -maxdepth 1 -name 'liboffice_full_*.tar.gz' -print0 \
    | xargs -0 stat -c '%Y %n' \
    | sort -nr \
    | tail -n +$((KEEP_WEEKS+1)) \
    | cut -d' ' -f2- \
    | xargs -r rm -f
  # monthly: keep last KEEP_MONTHS
  find "$BACKUP_BASE/full" -maxdepth 1 -name 'liboffice_full_*.tar.gz' -print0 \
    | xargs -0 basename -a \
    | sed 's/.*_\([0-9]\{4\}-[0-9]\{2\}-[0-9]\{2\}\)\.tar\.gz/\1 \0/' \
    | sort -k1,1 -r \
    | awk -v keep="$KEEP_MONTHS" '!seen[$2]++ {n++; if (n>keep) print $2}' \
    | xargs -r rm -f
  log "Retention applied: days=$KEEP_DAYS weeks=$KEEP_WEEKS months=$KEEP_MONTHS"
}

main() {
  log "=== Backup start ==="
  do_rsync
  if [[ "$WEEK_DAY" -eq 7 ]]; then
    do_tar_full
  fi
  do_retention
  log "=== Backup end ==="
}

main "$@"

0
看了该问题的人还看了