Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/bin/bash
- SOURCEDIR="/"
- TARGETDIR="/path/to/backup/location" #this one must not end with a / !!!!
- EXCLUDELIST="/path/to/backup-root-exclude-list.txt"
- LOGDIR="/path/to/rootbackup/logs/"
- mkdir -p "$LOGDIR"
- LOGFILE="$LOGDIR/rsync-backup-root-$(date '+%Y-%m-%d_%H-%M-%S').log"
- echo "SOURCEDIR : $SOURCEDIR" >> "$LOGFILE"
- echo "TARGETDIR : $TARGETDIR" >> "$LOGFILE"
- echo "EXCLUDELIST : $EXCLUDELIST" >> "$LOGFILE"
- echo "LOGDIR : $LOGDIR" >> "$LOGFILE"
- echo "" >> "$LOGFILE"
- echo "[$(date '+%Y-%m-%d %H:%M:%S')] Starting rsync job" >> "$LOGFILE"
- echo "" >> "$LOGFILE"
- # DRY-RUN:
- rsync --dry-run -axv --progress -s --exclude-from="$EXCLUDELIST" "$SOURCEDIR" "$TARGETDIR" >> "$LOGFILE" 2>&1
- # REAL BACKUP
- # rsync -axv -s --delete --exclude-from="$EXCLUDELIST" "$SOURCEDIR" "$TARGETDIR" >> "$LOGFILE" 2>&1
- # STATUS
- echo "" >> "$LOGFILE"
- STATUS=$?
- if [ $STATUS -eq 0 ]; then
- echo "[$(date '+%Y-%m-%d %H:%M:%S')] rsync job completed successfully :)" >> "$LOGFILE"
- else
- echo "[$(date '+%Y-%m-%d %H:%M:%S')] rsync job !!! FAILED !!! with status $STATUS" >> "$LOGFILE"
- fi
- # LOG ROTATION LOGIC
- echo "" >> "$LOGFILE"
- # Get list of all log files, sorted by timestamp (oldest first)
- LOGS=($(find "$LOGDIR" -type f -name 'rsync-backup-root*.log' -printf '%f\n' | sort))
- TOTAL_LOGS=${#LOGS[@]}
- if [ $TOTAL_LOGS -lt 2 ]; then
- # Only one or zero logs, nothing to rotate
- echo "[$(date '+%Y-%m-%d %H:%M:%S')] No log rotation needed (less than 2 logs)" >> "$LOGFILE"
- else
- # Always keep the very oldest log (${LOGS[0]})
- # Rotate: keep up to 30 newest logs (${LOGS[-20..-1]} in bash array)
- # Delete all others except the oldest and the newest 30
- for ((i=1; i<TOTAL_LOGS-30; i++)); do
- if [ $i -lt $TOTAL_LOGS ]; then
- echo "[$(date '+%Y-%m-%d %H:%M:%S')] Removing old log: ${LOGS[$i]}" >> "$LOGFILE"
- rm -f "$LOGDIR/${LOGS[$i]}"
- fi
- done
- fi
Advertisement
Add Comment
Please, Sign In to add comment