Skip to content
Snippets Groups Projects
Select Git revision
  • 6ef84880cc1b05596c225a04c559ff7fb806e6ff
  • master default protected
  • simple-task/7248-eol-check-add-node-22
  • 6877_check_iml_deployment
4 results

check_http.md

Blame
  • backup.sh NaN GiB
    #!/bin/bash
    # ================================================================================
    #
    # START BACKUP
    #
    # For a backup will be done:
    #   - local dumps for all database types will be performed
    #   - transfer of data directories will be started
    #
    # This script should be added as cronjob (see /etc/cron.d/)
    #
    # --------------------------------------------------------------------------------
    # ah - Axel Hahn <axel.hahn@iml.unibe.ch>
    #
    # 2022-01-14  ah  v1.0
    # 2022-02-10  ah  v1.1  handle local dumps only; improve infos
    # ================================================================================
    
    . $( dirname "$0" )/jobhelper.sh
    . `dirname $0`/inc_bash.sh
    
      typeset -i rcBackup=0
      typeset -i rcTransfer=0
      bStart=1
    
    
    # --------------------------------------------------------------------------------
    # FUNCTIONS
    # --------------------------------------------------------------------------------
    
    function showHelp(){
        self=$(basename "$0")
        cat << EOFhelp
    
    START A BACKUP
    
    This script starts 
      - the database backups and creates dumps locally
      - the file backup (using restic or duplicity)
    
    SYNTAX:
    
        $self [OPTIONS]
    
        default: no parameter:
    
    OPTIONS:
    
        -d, --dryrun  just show infos, do not start a backup
        -h, --help    Show this help
    
        The following parameters force the backup type (if using duplicity):
        -a, --auto    force auto 
        -o, --older   duplicity type=auto: repeat full backup if last full 
                      backup is older than ... like "1M" for 1 month
        -f, --full    force full backup (if supported)
        -i, --inc     force incrmenental backup
    
    EOFhelp
    }
    
    # --------------------------------------------------------------------------------
    # MAIN
    # --------------------------------------------------------------------------------
    
      # --- read backup config data
      j_read
    
      # --- handle params
      while [ "$#" -gt 0 ]; 
      do
    
        case "$1" in
            -h|-\?|--help)
                echo "Param: show help"
                showHelp
                exit 0
                ;;
    
            -d|--dryrun)
                echo "Param: setting to DRY RUN"
                bStart=0
                ;;
            -a|--auto)
                echo "Param: setting to AUTO"
                JOBDEF_TYPE=auto
                bStart=1
                ;;
            -o|--older)
                echo "Param: setting to AUTO on duplicity"
                echo "$2" | grep "^[1-9][0-9]*[a-zA-Z]$" 2>/dev/null
                if [ $? -ne 0 ]; then
                    >&2 echo "ERROR: the value after $1 must be a number and a letter (for unit); i.e. 1M for 1 month"
                    exit 1
                else
                    JOBDEF_TYPE=auto
                    JOBDEF_AUTO=$2
                    shift 1
                fi
                ;;
            -f|--full)
                echo "Param: setting to FULL"
                JOBDEF_TYPE=full
                JOBDEF_AUTO=
                bStart=1
                ;;
            -i|--inc)
                echo "Param: setting to INC"
                JOBDEF_TYPE=inc
                JOBDEF_AUTO=
                bStart=1
                ;;
            *)
                >&2 echo "ERROR: parameter [$1] is unknown"
                showHelp
                exit 1 
        esac
        shift 1
    
      done
    
      # --- update logfile after param overrides
      _j_setLogfile
    
    # --------------------------------------------------------------------------------
    # show infos
    # --------------------------------------------------------------------------------
    
      # TODO:
      # check localdump plugins ... what database types are detected
    
      # --- infos for transfer
    
    
      STORAGE_BASEDIR=$(_j_getvar "${STORAGEFILE}" "storage")
    
      if [ -z "$STORAGE_BASEDIR" ]; then
        echo "INFO: no value for backup target (in storage = ...)"
        echo "This is not handled as an error. I will run local backup dumps only; no transfer."
      else
        STORAGE_BIN=$( _j_getvar "${STORAGEFILE}" "bin" )
        cfg_type=$(_j_getvar "${STORAGEFILE}" "type")
        cfg_full=$(_j_getvar "${STORAGEFILE}" "full")
        cfg_startfull=$(_j_getvar "${STORAGEFILE}" "start-time-full")
    
        test -z "${cfg_full}${cfg_startfull}" || cfg_info="INFO: Type is [auto]; ignoring config for full backup: [full = $cfg_full ... start-time-full = $cfg_startfull]"
    
        JOBDEF_STARTTIME=$(date +%H%M)
    
        cat << EOFbackupinfo
    
        CONFIG:
          Used Backup tool : $STORAGE_BIN
          Backup type      : $(_j_getvar ${STORAGEFILE} "type")
            $( test "$cfg_type" = "auto" && echo "$cfg_info" )$( test "$cfg_type" = "auto" || echo "INFO: full backup: $cfg_info" )
    
        EFFECTIVE:
          type             : $JOBDEF_TYPE $JOBDEF_AUTO
          log              : $JOB_LOGFILE
    
          target           : ${STORAGE_BASEDIR}
    
    EOFbackupinfo
        test -z "$STORAGE_BASEDIR" || (
          echo "      dirs to transfer : "
          j_getDirs2Backup | sed "s#^#                         #g"
        )
      fi
      echo
    
    # --------------------------------------------------------------------------------
    # start backup
    # --------------------------------------------------------------------------------
    
      j_requireUser "root"
    
      if [ $bStart -eq 1 ]; then
    
        sleep 3
    
        # ------------------------------------------------------------
        # local dumps
        # ------------------------------------------------------------
    
        echo "INFO: $(date) - starting backup ... type $JOBDEF_TYPE - time $JOBDEF_STARTTIME " | tee -a "$JOB_LOGFILE"
        touch "${JOB_DONEFILE}.01.START"
        cat "$JOBFILE" >>"$JOB_LOGFILE"
    
    
        echo "INFO: $(date) - Making local backups ... ${DIR_SELF}/localdump.sh ALL" | tee -a "$JOB_LOGFILE"
        "${DIR_SELF}"/localdump.sh ALL | tee -a "$JOB_LOGFILE"
        rcBackup=$?
        echo "INFO: $(date) - local backups were finished" | tee -a "$JOB_LOGFILE"
        echo
        sleep 2
    
        # ------------------------------------------------------------
        # transfer
        # ------------------------------------------------------------
    
        if [ -n "$STORAGE_BASEDIR" ] && [ -x "${DIR_SELF}/transfer.sh" ]; then
    
          # transfer files
          cat "$STORAGEFILE" >>"$JOB_LOGFILE"
          echo "INFO: $(date) - Sending data to storage... ${DIR_SELF}/transfer.sh $JOBDEF_TYPE" | tee -a "$JOB_LOGFILE"
          touch "${JOB_DONEFILE}.02.STARTTRANSFER"
          # "${DIR_SELF}"/transfer.sh $JOBDEF_TYPE "$JOBDEF_AUTO" 2>&1 | tee -a "$JOB_LOGFILE"
          "${DIR_SELF}"/transfer.sh $JOBDEF_TYPE "$JOBDEF_AUTO" 2>&1
          rcTransfer=$?
    
        else
          echo "SKIP - No backup of dirs to a backup target." | tee -a "$JOB_LOGFILE"
        fi
    
        rcBackup=$rcBackup+rcTransfer
    
        echo "INFO: $(date) - DONE" | tee -a "$JOB_LOGFILE"
        touch "${JOB_DONEFILE}.03.DONE"
    
        # ------------------------------------------------------------
        # cleanup
        # ------------------------------------------------------------
    
        echo
        echo "INFO: $(date) - compress older logs"
        echo find "${DIR_LOGS}" -name "*.log" -mtime +2 -print -exec gzip {} \;
        color cmd 
        find "${DIR_LOGS}" -name "*.log" -mtime +2 -print -exec gzip {} \;
        color reset
        echo
    
        echo "INFO: $(date) - cleanup logs"
        echo find "${DIR_LOGS}" -mtime +28 -delete -print
        color cmd
        find "${DIR_LOGS}" -mtime +28 -delete -print
        color reset
        echo
    
        # ------------------------------------------------------------
        # finish
        # ------------------------------------------------------------
    
        echo STATUS $0 exit with final returncode rc=$rcBackup | tee -a "$JOB_LOGFILE"
        echo
        echo "log for this executed job is"
        ls -l "$JOB_LOGFILE"
        echo
    
      else
        echo "Nothing to do."
      fi
    
    # --------------------------------------------------------------------------------
    
    
      exit $rcBackup
    
    
    # --------------------------------------------------------------------------------