#!/bin/bash # ================================================================================ # # SCHEDULER # # schedule backups. # If backup time is reached then # - the local dumps for all database types will be performed # - transfer of data directories will be started # # This script is added as cron (see /etc/cron.d/) # # SYNTAX # scheduler.sh [option] # # OPTIONS # default: no parameter: check jobs/backups.job for scheduling backups # -d, --dryrun check date only; no run of a backup # -f, --force: force incremental backup NOW. # # -------------------------------------------------------------------------------- # ah - Axel Hahn <axel.hahn@iml.unibe.ch> # ds - Daniel Schueler <daniel.schueler@iml.unibe.ch> # # 2016-11-10 ah,ds v1.0 # ================================================================================ . `dirname $0`/jobhelper.sh typeset -i rcScheduler=0 typeset -i rcTransfer=0 bStart=1 # -------------------------------------------------------------------------------- # checks # -------------------------------------------------------------------------------- j_requireUser "root" # --- read schedulerdata j_read cat << EOFschedulerinfo execution times: $JOBDEF_INC at `_j_getvar ${JOBFILE} "start-time-inc"` Full backup : $JOBDEF_FULL at `_j_getvar ${JOBFILE} "start-time-full"` do today = $JOB_DOTODAY type = $JOBDEF_TYPE $JOBDEF_AUTO starttime = $JOBDEF_STARTTIME stopfile = $JOB_DONEFILE EOFschedulerinfo if [ $JOB_DOTODAY -eq 0 ]; then echo "ABORT: nothing to do today" bStart=0 fi # check: Backup bereits gelaufen? ls -l ${JOB_DONEFILE}.* 2>/dev/null if [ $? -eq 0 ]; then echo echo "ABORT: $JOB_DONEFILE was found" bStart=0 else echo "Job was not started yet." fi if [ ${JOBDEF_STARTTIME} -gt ${mytime} ]; then echo "INFO: waiting for next run at ${JOBDEF_STARTTIME} ..." bStart=0 fi if [ "$1" = "-f" -o "$1" = "--force" ]; then echo FORCE parameter detected. echo Overriding settings to make an incremental backup now. JOB_DOTODAY=1 JOBDEF_TYPE=inc JOBDEF_STARTTIME=`date +%H%M` bStart=1 fi if [ "$1" = "-d" -o "$1" = "--dryrun" ]; then echo DRYRUN parameter detected bStart=0 fi # -------------------------------------------------------------------------------- if [ $bStart -eq 1 ]; then # ----- 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 rcScheduler=$? echo "INFO: `date` - local backups were finished" | tee -a $JOB_LOGFILE sleep 2 # ----- transfer if [ -x "${DIR_SELF}/transfer.sh" ]; then # transfer files 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 rcTransfer=$? else echo "SKIP - transfer.sh not found; all files will be kept on local filesystem only" | tee -a $JOB_LOGFILE fi rcScheduler=$rcScheduler+rcTransfer echo "INFO: `date` - DONE" | tee -a $JOB_LOGFILE touch "${JOB_DONEFILE}.03.DONE" echo echo log for this executed job is ls -l $JOB_LOGFILE echo echo "INFO: `date` - cleanup logs" echo find "${DIR_LOGS}" -mtime +28 -delete -print find "${DIR_LOGS}" -mtime +28 -delete -print echo echo STATUS $0 exit with final returncode rc=$rcScheduler | tee -a $JOB_LOGFILE echo else echo "Nothing to do." fi # -------------------------------------------------------------------------------- exit $rcScheduler # --------------------------------------------------------------------------------