#!/command/with-contenv bash source /assets/functions/00-container PROCESS_NAME="db-backup{{BACKUP_NUMBER}}-scheduler" check_container_initialized check_service_initialized init 10-db-backup source /assets/functions/10-db-backup source /assets/defaults/10-db-backup bootstrap_variables backup_init {{BACKUP_NUMBER}} bootstrap_variables parse_variables {{BACKUP_NUMBER}} if [ -z "${backup_job_db_name}" ]; then PROCESS_NAME="{{BACKUP_NUMBER}}${backup_job_db_host//\//_}" else PROCESS_NAME="{{BACKUP_NUMBER}}-${backup_job_db_host//\//_}__${backup_job_db_name}" fi trap ctrl_c INT if [[ "${MODE,,}" =~ "standalone" ]] || [ "${1,,}" = "manual" ] || [ "${1,,}" = "now" ]; then print_debug "Detected Manual Mode" persist=false backup_job_backup_begin=+0 else silent sleep {{BACKUP_NUMBER}} time_last_run=0 time_current=$(date +'%s') if [[ "${backup_job_backup_begin}" =~ ^\+(.*)$ ]]; then print_debug "BACKUP_BEGIN is a jump of minute starting with +" timer plusvalue elif [[ "${backup_job_backup_begin}" =~ ^[0-9]{4}$ ]]; then print_debug "BACKUP_BEGIN is a HHMM value" timer time elif [[ "${backup_job_backup_begin}" =~ ([0-9]{4})-([0-9]{2})-([0-9]{2})[[:space:]]([0-9]{2}):([0-9]{2}):([0-9]{2}) ]]; then print_debug "BACKUP_BEGIN is a full date timestamp" timer datetime elif echo "${backup_job_backup_begin//\*/#}" | grep -qP "^(((\d+,)+\d+|(\d+(\/|-)\d+)|\d+|#) ?){5}$" ; then print_debug "BACKUP_BEGIN is a cron expression" time_last_run=$(date +"%s") timer cron "${backup_job_backup_begin}" "${time_current}" "${time_last_run}" else print_error "_BACKUP_BEGIN is invalid - Unable to perform scheduling" cat < "${backup_job_blackout_start}" ]] && [[ "${time_current_hour_minute}" < "${backup_job_blackout_finish}" ]] ; then blackout=true else blackout=false fi fi if var_true "${blackout}" ; then print_notice "Detected Blackout Period - Not performing backup operations" else timer job start process_limiter echo "{{BACKUP_NUMBER}}" >> /tmp/.container/db-backup-backups print_debug "Backup {{BACKUP_NUMBER}} routines started time: $(date +'%Y-%m-%d %T %Z')" bootstrap_filesystem check_availability backup_"${dbtype,,}" timer job stop if [ -z "${exitcode_backup}" ] ; then exitcode_backup="0" ; fi print_info "Backup {{BACKUP_NUMBER}} routines finish time: $(date -d @"${backup_job_finish_time}" +'%Y-%m-%d %T %Z') with exit code ${exitcode_backup}" print_notice "Backup {{BACKUP_NUMBER}} routines time taken: $(echo "${backup_job_total_time}" | awk '{printf "Hours: %d Minutes: %02d Seconds: %02d", $1/3600, ($1/60)%60, $1%60}')" sed -i "/^{{BACKUP_NUMBER}}/d" /tmp/.container/db-backup-backups fi symlink_log if var_false "${persist}" ; then print_debug "Exiting due to manual mode" exit "${exitcode_backup}"; else if var_true "${stop_scheduler_backup}" ; then print_error "Stopping backup_scheduler {{BACKUP_NUMBER}} due to detected errors. Fix and restart container." s6-svc -d /var/run/s6/legacy-services/dbbackup-{{BACKUP_NUMBER}} else if [ ! "${time_cron}" = "true" ]; then print_notice "Sleeping for another $(($backup_job_backup_interval*60-backup_job_total_time)) seconds. Waking up at $(date -d@"$(( $(date +%s)+$(($backup_job_backup_interval*60-backup_job_total_time))))" +'%Y-%m-%d %T %Z') " silent sleep $(($backup_job_backup_interval*60-backup_job_total_time)) else time_last_run=$(date +"%s") timer cron "${backup_job_backup_begin}" "${time_current}" "${time_last_run}" print_notice "Sleeping for another ${time_wait} seconds. Waking up at $(date -d@"${time_future}" +'%Y-%m-%d %T %Z') " silent sleep "${time_wait}" fi fi fi done