Site Tools


backup_script

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
backup_script [2025/05/02 22:09] thilobackup_script [2025/05/06 08:08] (current) – little typo thilo
Line 52: Line 52:
  \\  \\
  
-  - Date covers from 1970 - in case Tomato Router has no time.+  - Command line arguments: backup directory, id-file and router /.eg. as IP). If provided, these will be used, else defaults apply (Router IP from `ip r`) 
 +  - Date regex covers from 1970 - in case Tomato Router has no time.
   - Sometimes tar fails.  - cover this error by just cleaning, next cron run may do it   - Sometimes tar fails.  - cover this error by just cleaning, next cron run may do it
-  - All eaRlier backups from the same day are abandoned. +  - All earlier backups from the same day are abandoned. 
-  - A total number of backups is kept. This number is configurable. \\ Older ones are deleted.+  - A total number of backups is kept. This number is configurable. Older ones are deleted.
  
  \\  \\
Line 61: Line 62:
    #!/bin/bash    #!/bin/bash
        
-  ROUTER=`ip r | grep default | head -1 | cut -d " " -f 3` +   DIR2BACKUP=/home/${LOGNAME}/Router_Backups 
-  USER=root +   LOCAL_ID_FILE=/home/${LOGNAME}/.ssh/id_tomato_ecdsa 
-  LOCAL_ID_FILE=/home/${LOGNAME}/.ssh/id_tomato_ecdsa +   ROUTER=`ip r | grep default | head -1 | cut -d " " -f 3  
-   +
-   +
-  if [[ "$1h" != "h" ]]; then +
-        ROUTER=$1 +
-        LOCAL_ID_FILE=$2 +
-  fi +
-  echo +
-  echo "Backing up: "${ROUTER} +
-  echo "ID-file:    "${LOCAL_ID_FILE} +
-  echo +
-  BACKUPHOST=`ip r | grep ${ROUTER} | grep default | head -1 | cut -d " " -f 9` +
-  PORT=5555 +
-  BACKUP_DIR=/home/${LOGNAME}/Router_Backups +
-  SCRIPT_FILE=nvram_save_cfg.sh +
-  PREFIX=FreshTomato +
-  EXT=cfg +
-  TRANSFER_FILENAME=config.tar +
-   +
-  # DATE_REGEX covers back to 1970 and further, in case Tomato Router has no date or date 1970-01-101 +
-  # Total coverage: 1900-01-01 until 2999-12-31 :-) +
-  DATE_REGEX=[12][09][0-9][0-9][01][0-9][0123][0-9] +
-  TIME_REGEX=[012][0-9][0-5][0-9] +
-  NO_OF_DIFF_FILES_TO_BE_KEPT=10+
        
-  pushd ${BACKUP_DIR} > /dev/null +   while [[ $# -gt 0 ]]; do 
-   +        case $1 in 
-  rm -f ${TRANSFER_FILENAME}  +                -d|--dir2backup) 
-   +                        DIR2BACKUP=$2 ;; 
-  # Thinks like +                -i|--idfile) 
-  # VAR=`nvram get os_version`  +                        LOCAL_ID_FILE=$2 ;; 
-  # seem not to work in bash via here doc, so write results into script file and source it +                -r|--router) 
-  # Further the individual filename is general not known, so tar it into temp file +                        ROUTER=$2 ;; 
-  +        esac 
-  # Kill netcat zombies +        shift; shift 
-  kill -9 `ps -ef | grep -v grep | grep netcat | sed -e "s/ [ ]*/ /g" | cut -d " " -f 2` 2> /dev/null +   done 
-  (netcat -l -p ${PORT} > ${TRANSFER_FILENAME}) & +    
-  ssh ${USER}@${ROUTER} -i ${LOCAL_ID_FILE} <<ENDSSH+   BACKUPHOST=`ip r | grep "${ROUTER%1}0/24" | head -1 | cut -d " " -f 9` 
 +   echo 
 +   echo "Backup dir:  "${DIR2BACKUP} 
 +   echo "id file:     "${LOCAL_ID_FILE} 
 +   echo "Backing up:  "${ROUTER} 
 +   echo "Backup host: "${BACKUPHOST} 
 +   echo 
 +   USER=root 
 +   PORT=5555 
 +   SCRIPT_FILE=nvram_save_cfg.sh 
 +   PREFIX=FreshTomato 
 +   EXT=cfg 
 +   TRANSFER_FILENAME=config.tar 
 +    
 +   # DATE_REGEX covers back to 1970 and further, in case Tomato Router has no date or date 1970-01-01 
 +   # Total coverage: 1900-01-01 until 2999-12-31 :-) 
 +   DATE_REGEX=[12][09][0-9][0-9][01][0-9][0123][0-9] 
 +   TIME_REGEX=[012][0-9][0-5][0-9] 
 +   NO_OF_DIFF_FILES_TO_BE_KEPT=10 
 +     
 +   pushd ${DIR2BACKUP} > /dev/null 
 +    
 +   rm -f ${TRANSFER_FILENAME}  
 +   # 
 +   # Thinks like 
 +   # VAR=`nvram get os_version`  
 +   # seem not to work in bash via here doc, so write results into script file and source it 
 +   # Further the individual filename is general not known, so tar it into temp file 
 +   
 +   # Kill netcat zombies 
 +   kill -9 `ps -ef | grep -v grep | grep netcat | sed -e "s/ [ ]*/ /g" | cut -d " " -f 2` 2> /dev/null 
 +   (netcat -l -p ${PORT} > ${TRANSFER_FILENAME}) & 
 +   ssh ${USER}@${ROUTER} -i ${LOCAL_ID_FILE} <<ENDSSH
         rm -f ${SCRIPT_FILE} ${TRANSFER_FILENAME} ${PREFIX}_*_${DATE_REGEX}_${TIME_REGEX}.${EXT}         rm -f ${SCRIPT_FILE} ${TRANSFER_FILENAME} ${PREFIX}_*_${DATE_REGEX}_${TIME_REGEX}.${EXT}
         echo "nvram save ${PREFIX}" >> ${SCRIPT_FILE}         echo "nvram save ${PREFIX}" >> ${SCRIPT_FILE}
Line 114: Line 124:
         sleep 5 # just wait a little bit before deleting the files not needed here any more         sleep 5 # just wait a little bit before deleting the files not needed here any more
         rm -f ${SCRIPT_FILE} ${TRANSFER_FILENAME} ${PREFIX}_*_${DATE_REGEX}_${TIME_REGEX}.${EXT}         rm -f ${SCRIPT_FILE} ${TRANSFER_FILENAME} ${PREFIX}_*_${DATE_REGEX}_${TIME_REGEX}.${EXT}
-  ENDSSH +   ENDSSH 
-   +    
-  THIS_BACKUP_FILE=`tar -xvf ${TRANSFER_FILENAME} | sed -e "s/^.*${PREFIX}/${PREFIX}/"+   THIS_BACKUP_FILE=`tar -xvf ${TRANSFER_FILENAME} | sed -e "s/^.*${PREFIX}/${PREFIX}/"
-  if [ "${THIS_BACKUP_FILE}" ]; then+   if [ "${THIS_BACKUP_FILE}" ]; then
         echo "Saved on this computer in `pwd`:"         echo "Saved on this computer in `pwd`:"
         echo ${THIS_BACKUP_FILE}         echo ${THIS_BACKUP_FILE}
         echo         echo
-        # Keep only one file (the latest) per day - delete earlier file of same day 
         TODAYS_BACKUP_FILES_PREFIX=${THIS_BACKUP_FILE%_*}         TODAYS_BACKUP_FILES_PREFIX=${THIS_BACKUP_FILE%_*}
 +        ALL_BACKUP_FILES_PREFIX=${TODAYS_BACKUP_FILES_PREFIX%_*}
 +        DATE=`date +%Y%m%d_%H%M`
 +        if ! [[ `find -cmin 5 | grep ${THIS_BACKUP_FILE}` ]] ; then
 +                # Date of the new files is more that 5 mins in the past  => seems Tomato Router has no date (or date 1970-01-01)
 +                touch ${THIS_BACKUP_FILE}
 +        fi
 +        # Keep only one file (the latest) per day - delete earlier file of same day    
         LIST_OLD_BACKUPS_OF_TODAY=`ls -t ${TODAYS_BACKUP_FILES_PREFIX}_${TIME_REGEX}.${EXT} 2> /dev/null | sed -e 1,1d`         LIST_OLD_BACKUPS_OF_TODAY=`ls -t ${TODAYS_BACKUP_FILES_PREFIX}_${TIME_REGEX}.${EXT} 2> /dev/null | sed -e 1,1d`
         if [ "${LIST_OLD_BACKUPS_OF_TODAY}" ]; then         if [ "${LIST_OLD_BACKUPS_OF_TODAY}" ]; then
                 echo "deleting today's earlier backups (to keep just one per day - the most recent):"                 echo "deleting today's earlier backups (to keep just one per day - the most recent):"
-                rm -${LIST_OLD_BACKUPS_OF_TODAY}+                rm -fv ${LIST_OLD_BACKUPS_OF_TODAY}
                 echo                 echo
         fi         fi
         # In total, keep only ${NO_OF_DIFF_FILES_TO_BE_KEPT} files - delete older files (of any day)         # In total, keep only ${NO_OF_DIFF_FILES_TO_BE_KEPT} files - delete older files (of any day)
-        ALL_BACKUP_FILES_PREFIX=${TODAYS_BACKUP_FILES_PREFIX%_*} +        OLDER_FILES=`ls -t ${ALL_BACKUP_FILES_PREFIX}_${DATE_REGEX}_${TIME_REGEX}.${EXT} | sed -e 1,${NO_OF_DIFF_FILES_TO_BE_KEPT}d` 
-        DELETE_OLDER=`ls -t ${ALL_BACKUP_FILES_PREFIX}_${DATE_REGEX}_${TIME_REGEX}.${EXT} | sed -e 1,${NO_OF_DIFF_FILES_TO_BE_KEPT}d` +        if [ "${OLDER_FILES}" ]; then
-        if [ "${DELETE_OLDER}" ]; then+
                 echo "keep only ${NO_OF_DIFF_FILES_TO_BE_KEPT} in total, delete:"                 echo "keep only ${NO_OF_DIFF_FILES_TO_BE_KEPT} in total, delete:"
-                rm -fv ${DELETE_OLDER}+                rm -fv ${OLDER_FILES}
                 echo                 echo
         fi         fi
         # delete transfer file only when tar was successfull, i.e. only here         # delete transfer file only when tar was successfull, i.e. only here
         rm ${TRANSFER_FILENAME}         rm ${TRANSFER_FILENAME}
-  else+   else
         echo "unknown error while untaring"         echo "unknown error while untaring"
-  fi +   fi 
-  popd > /dev/null +   popd > /dev/null 
 +  
  \\  \\
  
backup_script.1746220196.txt.gz · Last modified: 2025/05/02 22:09 by thilo