#!/command/with-contenv bash source /assets/functions/00-container source /assets/functions/10-db-backup source /assets/defaults/10-db-backup PROCESS_NAME="db-backup" bootstrap_variables if [ "${MODE,,}" = "manual" ] || [ "${1,,}" = "manual" ] || [ "${1,,}" = "now" ]; then DB_DUMP_BEGIN=+0 manual=TRUE print_debug "Detected Manual Mode" else sleep 5 current_time=$(date +"%s") today=$(date +"%Y%m%d") print_debug "******** Begin DB_DUMP_BEGIN ********" print_debug "Current time $current_time" if [[ $DB_DUMP_BEGIN =~ ^\+(.*)$ ]]; then print_debug "DB_DUMP_BEGIN is a jump of minute starting with +." waittime=$(( ${BASH_REMATCH[1]} * 60 )) target_time=$(($current_time + $waittime)) elif [[ $DB_DUMP_BEGIN =~ ^[0-9]+$ ]]; then print_debug "DB_DUMP_BEGIN is an integer." target_time=$(date --date="${today}${DB_DUMP_BEGIN}" +"%s") if [[ "$target_time" < "$current_time" ]]; then target_time=$(($target_time + 24*60*60)) fi waittime=$(($target_time - $current_time)) elif [[ $DB_DUMP_BEGIN =~ ^([0-9]{4})-([0-9]{2})-([0-9]{2})[[:space:]]([0-9]{2}):([0-9]{2}):([0-9]{2})$ ]]; then # Calculate DB_DUMP_BEGIN time in seconds dump_time=$(date -d "${DB_DUMP_BEGIN}" +%s) print_debug "Dump time = $dump_time" # Calculate the difference in seconds waittime=$((dump_time - current_time)) print_debug "Difference in seconds: $waittime" if (( $waittime < 0 )); then waittime=$(( ($waittime + ($DB_DUMP_FREQ - 1)) / ($DB_DUMP_FREQ * 60) )) waittime=$(( $waittime * -1 )) print_debug "Difference in seconds (rounded) waittime is in the past : $waittime" fi target_time=$(($current_time + $waittime)) print_debug "Target time = $target_time" else print_info "DB_DUMP_BEGIN is not starting with + or is not an integer or is not in the correct format (YYYY-mm-dd hh:mm:ss)." fi print_debug "******** End DB_DUMP_BEGIN ********" print_info "Wait Time: ${waittime} Target time: $(date -d @${target_time} +"%Y-%m-%d %T %Z") Current Time: $(date -d @${current_time} +"%Y-%m-%d %T %Z")" sleep $waittime fi while true; do mkdir -p "${TEMP_LOCATION}" backup_start_time=$(date +"%s") print_debug "Backup routines started time: $(date +'%Y-%m-%d %T %Z')" case "${dbtype,,}" in "couch" ) check_availability backup_couch ;; "influx" ) check_availability backup_influx ;; "mssql" ) check_availability backup_mssql ;; "mysql" ) check_availability backup_mysql ;; "mongo" ) check_availability backup_mongo ;; "pgsql" ) check_availability backup_pgsql ;; "redis" ) check_availability backup_redis ;; "sqlite3" ) check_availability backup_sqlite3 ;; esac backup_finish_time=$(date +"%s") backup_total_time=$(echo $((backup_finish_time-backup_start_time))) if [ -z "$master_exit_code" ] ; then master_exit_code="0" ; fi print_info "Backup routines finish time: $(date -d @${backup_finish_time} +"%Y-%m-%d %T %Z") with overall exit code ${master_exit_code}" print_notice "Backup routines time taken: $(echo ${backup_total_time} | awk '{printf "Hours: %d Minutes: %02d Seconds: %02d", $1/3600, ($1/60)%60, $1%60}')" cleanup_old_data if var_true "${manual}" ; then print_debug "Exiting due to manual mode" exit ${master_exit_code}; else print_notice "Sleeping for another $(($DB_DUMP_FREQ*60-backup_total_time)) seconds. Waking up at $(date -d@"$(( $(date +%s)+$(($DB_DUMP_FREQ*60-backup_total_time))))" +"%Y-%m-%d %T %Z") " sleep $(($DB_DUMP_FREQ*60-backup_total_time)) fi done