1234567891011121314151617181920212223242526272829303132333435363738394041424344454647 |
- #!/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
|