#!/bin/bash # Enqueue a backup for every installed app that has backups enabled. Invoked # once daily by the backup scheduler crontab entry. Each app is handed to # backupAppSchedule, which queues a task for the processor (WebUI installs) or # runs the backup inline (terminal-only installs). backupScheduleEnabledApps() { isHeader "Scheduling backups for enabled applications" if [ ! -f "$docker_dir/$db_file" ]; then isError "Database not found: $docker_dir/$db_file" return 1 fi local app_names=() while IFS= read -r name; do [[ -z "$name" ]] && continue app_names+=("$name") done < <(runInstallOp sqlite3 "$docker_dir/$db_file" "SELECT name FROM apps WHERE status = 1;") local queued=0 for name in "${app_names[@]}"; do # libreportal (the WebUI) is reproducible — its state rides in the system # config snapshot, so it's never scheduled as an app backup. [[ "$name" == "libreportal" ]] && continue local backup_flag="CFG_${name^^}_BACKUP" if [[ "${!backup_flag}" == "true" ]]; then backupAppSchedule "$name" ((queued++)) fi done # Keep the system config fresh on the schedule too (settings + the # backup-location creds). Queue it via the task processor on WebUI installs, # else run inline — mirroring backupAppSchedule. backupSystemConfig no-ops # when no locations are enabled. if [[ "$CFG_REQUIREMENT_WEBUI" == "true" ]] && declare -f createTaskFile >/dev/null 2>&1; then createTaskFile "libreportal backup system" "backup" "system" \ && isSuccessful "System config backup task queued" \ || backupSystemConfig else backupSystemConfig fi isSuccessful "Backup scheduling complete — $queued app(s) queued + system config" }