server_file_backup.sh 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. #!/bin/bash
  2. # Usage: ./server_file_backup.sh $BACKUP_DIR $SAVE_DIR
  3. # Or: curl -s https://git.immiles.com/miles/scripts/raw/master/server_file_backup.sh | bash -s $BACKUP_DIR $SAVE_DIR
  4. #set -ex
  5. # Set Var
  6. BACKUP_DIR=$1
  7. SAVE_DIR=$2
  8. DATE=`date +"%Y%m%d_%H%M%S"`
  9. LOG_FILE=$HOME/logs/file_backup.log
  10. FILE_BASENAME=`echo $BACKUP_DIR | sed 's#/#_#g'`
  11. FILE_BASENAME=${FILE_BASENAME:1}
  12. RETENTION=$((14*24*60)) # 2 weeks
  13. KEEP=7
  14. mkdir -p $HOME/logs
  15. echo "--------------------------$DATE------------------------" >> $LOG_FILE
  16. echo "[BEGIN] Backup [$BACKUP_DIR]" >> $LOG_FILE
  17. # Backup
  18. exclude=( `cat /proc/mounts | awk '{print $2}' | grep -E 'aliyun|google'` )
  19. exclude_options=()
  20. for x in "${exclude[@]}"; do
  21. exclude_options+=(--exclude="$x")
  22. done
  23. tar_cmd="tar ${exclude_options[@]} --ignore-failed-read -jpcf $SAVE_DIR/$FILE_BASENAME.$DATE.tar.bz2 $BACKUP_DIR >> $LOG_FILE 2>&1"
  24. echo $tar_cmd >> $LOG_FILE
  25. eval $tar_cmd >> $LOG_FILE 2>&1
  26. if [ $? == "0" ];then
  27. echo "[SUCCESS] Files in [$SAVE_DIR] backup" >> $LOG_FILE
  28. echo "--------------------------$DATE------------------------" >> $LOG_FILE
  29. else
  30. echo "[FAIL] Files in [$SAVE_DIR] backup" >> $LOG_FILE
  31. echo "--------------------------$DATE------------------------" >> $LOG_FILE
  32. exit 1
  33. fi
  34. # Clean up
  35. 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
  36. exit 0