#!/bin/bash # Usage: ./server_file_backup.sh $BACKUP_DIR $SAVE_DIR # Or: curl -s https://git.immiles.com/miles/scripts/raw/master/server_file_backup.sh | bash -s $BACKUP_DIR $SAVE_DIR #set -ex # Set Var BACKUP_DIR=$1 SAVE_DIR=$2 DATE=`date +"%Y%m%d_%H%M%S"` LOG_FILE=$HOME/logs/file_backup.log FILE_BASENAME=`echo $BACKUP_DIR | sed 's#/#_#g'` FILE_BASENAME=${FILE_BASENAME:1} RETENTION=$((14*24*60)) # 2 weeks KEEP=7 mkdir -p $HOME/logs echo "--------------------------$DATE------------------------" >> $LOG_FILE echo "[BEGIN] Backup [$BACKUP_DIR]" >> $LOG_FILE # Backup exclude=( `cat /proc/mounts | awk '{print $2}' | grep -E 'aliyun|google'` ) exclude_options=() for x in "${exclude[@]}"; do exclude_options+=(--exclude="$x") done tar_cmd="tar ${exclude_options[@]} --ignore-failed-read -jpcf $SAVE_DIR/$FILE_BASENAME.$DATE.tar.bz2 $BACKUP_DIR >> $LOG_FILE 2>&1" echo $tar_cmd >> $LOG_FILE eval $tar_cmd >> $LOG_FILE 2>&1 if [ $? == "0" ];then echo "[SUCCESS] Files in [$SAVE_DIR] backup" >> $LOG_FILE echo "--------------------------$DATE------------------------" >> $LOG_FILE else echo "[FAIL] Files in [$SAVE_DIR] backup" >> $LOG_FILE echo "--------------------------$DATE------------------------" >> $LOG_FILE exit 1 fi # Clean up find $SAVE_DIR -name "*.tar.bz2" -type f -printf '%T@ %p\n' -mmin +$RETENTION | sort -nr | tail -n +$KEEP | awk '{ print $2 }' | xargs -r rm >> $LOG_FILE 2>&1 exit 0