flipje

rsync-backup

Jul 8th, 2011
105
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 2.48 KB | None | 0 0
  1. #!/bin/bash
  2. #-------------------------------------------------------------------------------
  3. # dit script backupt de /root/ /home/ /etc/ en /usr/ en de /data
  4. # flip hess 2011 06 20 [email protected]
  5. #
  6. #-------------------------------------------------------------------------------
  7.  
  8. # Global variables:
  9.  
  10. PATH='/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin'
  11. SCRIPT_PATH="${0}"
  12. HOST="${1}"
  13.  
  14.  
  15. # Functions:
  16.  
  17. # The main function.
  18. function fMain()
  19. {
  20.   # source and destination:
  21.   local DEST_DIR="/backups/${HOST}"
  22.   local SOURCEDIRS='etc root usr home var data'
  23.  
  24.   # tunnel settings:
  25.   local SSH='ssh -A'
  26.   local SSHPORT='2222'
  27.  
  28.   # ssh settings:
  29.   local KEYCHAIN_FILE='/root/.keychain/backup-sh'
  30.  
  31.   # rsync settings:
  32.   local RSYNC="rsync"
  33.   local RUSER='root'
  34.  
  35.   # time settings:
  36.   local TIME_STAMP="$(date '+%F_%H.%M.%S')"
  37.  
  38.   # Check whether arguments are given:
  39.   if [ ${#} != 1 ]
  40.   then
  41.     fShowUsage
  42.     return 1
  43.   fi
  44.  
  45.   # Load SSH agent environment variables:
  46.   if [ -f "${KEYCHAIN_FILE}" ]
  47.   then
  48.     . "${KEYCHAIN_FILE}"
  49.   else
  50.     echo "\"${KEYCHAIN_FILE}\" does not exist!"
  51.     return 3
  52.   fi
  53.  
  54.   # Check target directory:
  55.   if [ ! -d "${DEST_DIR}" ]
  56.   then
  57.     echo "Backup directory \"${DEST_DIR}\" does not exist!"
  58.     return 2
  59.   fi
  60.  
  61.   # Check whether SSH to  host without password is possible:
  62.   if ( ! ${SSH} -p${SSHPORT} -o 'BatchMode yes' -qq ${USER}@${HOST} exit 0 )
  63.   then
  64.     echo "No SSH access to host ${HOST}"
  65.     return 4
  66.   fi
  67.  
  68.   # ALL DIRS BACKUPPEN
  69.  
  70.   # for loopje:
  71.   for SOURCEDIR in ${SOURCEDIRS}
  72.   do
  73.      # Check target directory:
  74.      if [ ! -d ${DEST_DIR}/${SOURCEDIR} ]
  75.      then
  76.        echo "${DEST_DIR}/${SOURCEDIR} does not exist, creating..."
  77.        mkdir -p ${DEST_DIR}/${SOURCEDIR}
  78.        # check exit code
  79.        if [ ${?} != 0 ]
  80.        then
  81.          echo "Failed to create ${DEST_DIR}/${SOURCEDIR}, skipping....."
  82.          continue
  83.        fi
  84.      fi
  85.  
  86.      # rsync dir to backupdir location:
  87.      ${RSYNC} --exclude '.gvfs' -avz -e "${SSH} -p${SSHPORT}" ${RUSER}@${HOST}:/${SOURCEDIR} ${DEST_DIR}/${SOURCEDIR}
  88.  
  89.      # check if succeeded
  90.      if [ ${?} != 0 ]
  91.      then
  92.        echo " offdisk backup of ${SOURCEDIR} on \"${TIME_STAMP}\" has failed "
  93.        continue
  94.      fi
  95.   done
  96.  
  97.  
  98.   return 0
  99. }
  100.  
  101. # Shows usage.
  102. function fShowUsage()
  103. {
  104.   echo "Usage: ${SCRIPT_PATH} HOST"
  105.   return 0
  106. }
  107.  
  108.  
  109. # Start the program:
  110. fMain "${@}"
  111.  
  112. # Exit with previous return code:
  113. exit "${?}"
Advertisement
Add Comment
Please, Sign In to add comment