mirror of
https://github.com/tiredofit/docker-db-backup.git
synced 2025-12-21 13:23:12 +01:00
111 lines
4.9 KiB
Plaintext
Executable File
111 lines
4.9 KiB
Plaintext
Executable File
#!/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 <<EOF
|
|
|
|
Valid Methods:
|
|
+(number) - Start in however many minutes
|
|
HHMM - Start at hour (00-24) and minute (00-59)
|
|
YYYY-MM-DD HH:mm:ss - Start at a specific date and time
|
|
0 23 * * * - Cron expression
|
|
|
|
EOF
|
|
print_error "Stopping backup_scheduler {{BACKUP_NUMBER}} due to detected errors. Fix and restart container."
|
|
stop_scheduler_backup=true
|
|
s6-svc -d /var/run/s6/legacy-services/dbbackup-{{BACKUP_NUMBER}}
|
|
fi
|
|
|
|
print_debug "Wait Time: ${time_wait} Future execution time: ${time_future} Current Time: ${time_current}"
|
|
print_info "Next Backup at $(date -d @"${time_future}" +'%Y-%m-%d %T %Z')"
|
|
silent sleep "${time_wait}"
|
|
fi
|
|
|
|
while true; do
|
|
if [ -n "${backup_job_blackout_start}" ] && [ -n "${backup_job_blackout_finish}" ] ; then
|
|
time_current_hour_minute=$(date +%H%M)
|
|
if [[ "${time_current_hour_minute}" > "${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
|