Added Shell Scripts
parent
b6aab4e747
commit
15087e1bdf
233
manifest.jps
233
manifest.jps
|
@ -13,37 +13,99 @@ targetNodes:
|
|||
- llsmp
|
||||
|
||||
globals:
|
||||
scriptSufix: mb-backup-manager
|
||||
envName: "${env.name}"
|
||||
log_file: "/var/log/backup_addon.log"
|
||||
|
||||
onInstall:
|
||||
- checkApplication
|
||||
- checkAddons
|
||||
- installRestic
|
||||
|
||||
settings:
|
||||
backupSettings:
|
||||
submitUnchanged: true
|
||||
fields:
|
||||
- name: blabel
|
||||
caption: Backup Label
|
||||
type: string
|
||||
restoreSettings:
|
||||
submitUnchanged: true
|
||||
fields:
|
||||
- name: snapshotId
|
||||
caption: Snapshot ID
|
||||
type: string
|
||||
|
||||
buttons:
|
||||
- caption: Backup Now
|
||||
action: backup
|
||||
action: backupnow
|
||||
loadingText: Backing up...
|
||||
confirmText: Do you want to initiate the backup process?
|
||||
successText: The backup process has been finished successfully.
|
||||
|
||||
menu:
|
||||
- caption: Core File Backup
|
||||
confirmText: Backup Core Files?
|
||||
loadingText: Backing up Core Files on your site
|
||||
loadingText: Backing up Core Files...
|
||||
action: backupcore
|
||||
caption: Backup Core Only
|
||||
successText: Backup Core Files Completed Successfully
|
||||
successText: Core Files Backup Completed Successfully
|
||||
settings: backupSettings
|
||||
title: Backup Core Files
|
||||
submitButtonText: Backup Now
|
||||
|
||||
- caption: Media Backup
|
||||
confirmText: Backup Media Files?
|
||||
loadingText: Backing up Media Files...
|
||||
action: backupmedia
|
||||
successText: Media Files Backup Completed Successfully
|
||||
settings: backupSettings
|
||||
title: Backup Media Files
|
||||
submitButtonText: Backup Now
|
||||
|
||||
- caption: Database Backup
|
||||
confirmText: Backup Database?
|
||||
loadingText: Backing up Database...
|
||||
action: backupdb
|
||||
successText: Database Backup Completed Successfully
|
||||
settings: backupSettings
|
||||
title: Backup Database
|
||||
submitButtonText: Backup Now
|
||||
|
||||
- caption: Restore
|
||||
confirmText: Restore from Snapshot?
|
||||
loadingText: Restoring...
|
||||
action: restore
|
||||
successText: Restore Completed Successfully
|
||||
settings: restoreSettings
|
||||
title: Restore from Snapshot
|
||||
submitButtonText: Restore Now
|
||||
|
||||
- caption: View Full Backups
|
||||
action: viewFullBackups
|
||||
confirmText: Are you sure you want to view full backups?
|
||||
successText: Full backups listed successfully.
|
||||
|
||||
- caption: View Core Backups
|
||||
action: viewCoreBackups
|
||||
confirmText: Are you sure you want to view core backups?
|
||||
successText: Core backups listed successfully.
|
||||
|
||||
- caption: View Media Backups
|
||||
action: viewMediaBackups
|
||||
confirmText: Are you sure you want to view media backups?
|
||||
successText: Media backups listed successfully.
|
||||
|
||||
- caption: View Database Backups
|
||||
action: viewDatabaseBackups
|
||||
confirmText: Are you sure you want to view database backups?
|
||||
successText: Database backups listed successfully.
|
||||
|
||||
- caption: Auto Backup Sched
|
||||
action: checkBackupSched
|
||||
confirmText: Check the schedules for automated backups?
|
||||
successText: Backup Scheds.
|
||||
|
||||
onUninstall:
|
||||
- callScript: uninstall
|
||||
- removeScript
|
||||
|
||||
onBeforeDelete:
|
||||
- callScript: uninstall
|
||||
- removeScript
|
||||
|
||||
onAfterRedeployContainer[cp]:
|
||||
|
@ -58,18 +120,85 @@ onAfterClone:
|
|||
backupCount: "5"
|
||||
|
||||
actions:
|
||||
checkApplication:
|
||||
- cmd[${nodes.cp.master.id}]: |-
|
||||
[ -f /root/check_app.sh ] && rm -f /root/check_app.sh;
|
||||
wget -O /root/check_app.sh ${baseUrl}/scripts/check_app.sh;
|
||||
bash /root/check_app.sh;
|
||||
user: root
|
||||
- if (response.out == "Non-supported"):
|
||||
- stopEvent:
|
||||
type: warning
|
||||
message: Deployed application is not supported by Backup add-on.
|
||||
backupnow:
|
||||
message: BACKUP ALL DONE
|
||||
- cmd[cp]:
|
||||
user: root
|
||||
commands: bash /home/jelastic/mb-backups/backup_all.sh "${globals.envName}"
|
||||
- return:
|
||||
type: info
|
||||
message: "${response.out}"
|
||||
|
||||
backupcore:
|
||||
- cmd[cp]:
|
||||
user: root
|
||||
commands: bash /home/jelastic/mb-backups/backup_core_files.sh "${globals.envName}" "${settings.blabel}"
|
||||
- return:
|
||||
type: info
|
||||
message: "${response.out}"
|
||||
|
||||
backupmedia:
|
||||
- cmd[cp]:
|
||||
user: root
|
||||
commands: bash /home/jelastic/mb-backups/backup_media.sh "${globals.envName}" "${settings.blabel}"
|
||||
- return:
|
||||
type: info
|
||||
message: "${response.out}"
|
||||
|
||||
backupdb:
|
||||
- cmd[cp]:
|
||||
user: root
|
||||
commands: bash /home/jelastic/mb-backups/backup_database.sh "${globals.envName}" "${settings.blabel}"
|
||||
- return:
|
||||
type: info
|
||||
message: "${response.out}"
|
||||
|
||||
restore:
|
||||
- cmd[cp]:
|
||||
user: root
|
||||
commands: bash /home/jelastic/mb-backups/restore_backup_direct.sh "${settings.snapshotId}" "${globals.envName}"
|
||||
- return:
|
||||
type: info
|
||||
message: "${response.out}"
|
||||
|
||||
viewFullBackups:
|
||||
- cmd[cp]:
|
||||
user: root
|
||||
commands: bash /home/jelastic/mb-backups/view_snapshots.sh main_backup
|
||||
- return:
|
||||
type: info
|
||||
message: "${response.out}"
|
||||
|
||||
viewCoreBackups:
|
||||
- cmd[cp]:
|
||||
user: root
|
||||
commands: bash /home/jelastic/mb-backups/view_snapshots.sh core_files
|
||||
- return:
|
||||
type: info
|
||||
message: "${response.out}"
|
||||
|
||||
viewMediaBackups:
|
||||
- cmd[cp]:
|
||||
user: root
|
||||
commands: bash /home/jelastic/mb-backups/view_snapshots.sh media_themes
|
||||
- return:
|
||||
type: info
|
||||
message: "${response.out}"
|
||||
|
||||
viewDatabaseBackups:
|
||||
- cmd[cp]:
|
||||
user: root
|
||||
commands: bash /home/jelastic/mb-backups/view_snapshots.sh wordpress_db
|
||||
- return:
|
||||
type: info
|
||||
message: "${response.out}"
|
||||
|
||||
checkBackupSched:
|
||||
- cmd[cp]:
|
||||
user: root
|
||||
commands: bash /home/jelastic/mb-backups/check_sched.sh
|
||||
- return:
|
||||
type: info
|
||||
message: "${response.out}"
|
||||
|
||||
checkAddons:
|
||||
- script: |-
|
||||
|
@ -116,67 +245,3 @@ actions:
|
|||
}" > /etc/logrotate.d/backup-addon
|
||||
fi
|
||||
user: root
|
||||
|
||||
installScript:
|
||||
- removeScript
|
||||
- script: ${baseUrl}/scripts/create-backup-main-script.js?_r=${fn.random}
|
||||
params:
|
||||
scriptName: ${env.envName}-${globals.scriptSufix}
|
||||
baseUrl: ${baseUrl}
|
||||
cronTime: '0 * * * *'
|
||||
backupCount: '5'
|
||||
userId: ${env.uid}
|
||||
|
||||
callScript:
|
||||
script: |-
|
||||
var resp = api.dev.scripting.Eval(appid, session, '${env.envName}-${globals.scriptSufix}', {action:"${this}"});
|
||||
if (resp.result === 1702 && "${this}" == "uninstall") {
|
||||
return { result: 0, out: "script not found" };
|
||||
} else {
|
||||
return resp.response || resp;
|
||||
}
|
||||
|
||||
removeScript:
|
||||
script: |-
|
||||
var resp = api.dev.scripting.GetScript(appid, session, '${env.envName}-${globals.scriptSufix}');
|
||||
if (resp.result === 0) {
|
||||
var resp = api.dev.scripting.DeleteScript(appid, session, '${env.envName}-${globals.scriptSufix}');
|
||||
return resp.response || resp;
|
||||
}
|
||||
return { result: 0 };
|
||||
|
||||
backup:
|
||||
- callScript: backup
|
||||
|
||||
backupcore:
|
||||
- cmd[cp]: |-
|
||||
# Ensure the /mbmanager directory exists
|
||||
mkdir -p /mbmanager
|
||||
|
||||
# Download the backup-logic.sh script if it doesn't already exist
|
||||
if [ ! -f /mbmanager/backup-logic.sh ]; then
|
||||
echo "Downloading backup-logic.sh script..."
|
||||
wget -O /mbmanager/backup-logic.sh '${baseUrl}/scripts/backup-logic.sh' || curl -o /mbmanager/backup-logic.sh '${baseUrl}/scripts/backup-logic.sh'
|
||||
fi
|
||||
|
||||
# Make the script executable
|
||||
chmod +x /mbmanager/backup-logic.sh
|
||||
|
||||
# Export necessary environment variables
|
||||
export ENV_NAME='${globals.envName}'
|
||||
export BACKUP_LOG_FILE='${globals.log_file}'
|
||||
export BACKUP_TYPE='manual'
|
||||
export APP_PATH='/var/www/webroot/ROOT'
|
||||
export RESTIC_PASSWORD='your_restic_repository_password' # Replace with your actual password
|
||||
export backupPath='/mnt/backups'
|
||||
|
||||
# Execute the backup_wp_core function from the script
|
||||
/bin/bash /mbmanager/backup-logic.sh backup_wp_core
|
||||
user: root
|
||||
|
||||
restore:
|
||||
- cmd[cp]: |-
|
||||
echo "${settings.backupedEnvName}" > /root/.backupedenv
|
||||
echo "${settings.backupDir}" > /root/.backupid
|
||||
user: root
|
||||
- callScript: restore
|
|
@ -0,0 +1,76 @@
|
|||
#!/bin/bash
|
||||
|
||||
# Check if Restic password was supplied
|
||||
if [ "$#" -ne 1 ]; then
|
||||
echo "Usage: $0 RESTIC_PASSWORD"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Configuration
|
||||
RESTIC_PASSWORD="$1"
|
||||
APP_PATH='/var/www/webroot/ROOT'
|
||||
WP_CONFIG="${APP_PATH}/wp-config.php"
|
||||
backupPath='/mnt/backups'
|
||||
LOG_DIR="/home/jelastic/mb-backups/logs"
|
||||
DB_NAME=$(grep "define( 'DB_NAME'" $WP_CONFIG | cut -d "'" -f 4)
|
||||
DB_USER=$(grep "define( 'DB_USER'" $WP_CONFIG | cut -d "'" -f 4)
|
||||
DB_PASSWORD=$(grep "define( 'DB_PASSWORD'" $WP_CONFIG | cut -d "'" -f 4)
|
||||
BACKUP_USER='wp_backup'
|
||||
BACKUP_PASSWORD='gaQjveXl24Xo66w'
|
||||
|
||||
export RESTIC_REPOSITORY="$backupPath"
|
||||
export RESTIC_PASSWORD
|
||||
|
||||
# Ensure log directory exists
|
||||
mkdir -p "$LOG_DIR"
|
||||
|
||||
# Backup functions
|
||||
backup_core_files() {
|
||||
local log_file="${LOG_DIR}/backup_core_files_$(date +'%Y-%m-%d').log"
|
||||
echo "[$(date +'%Y-%m-%d %H:%M:%S')] Starting Core Files Backup" | tee -a "$log_file"
|
||||
local excludePaths=("$APP_PATH/wp-content/uploads")
|
||||
|
||||
local excludeOptions=""
|
||||
for path in "${excludePaths[@]}"; do
|
||||
excludeOptions+="--exclude $path "
|
||||
done
|
||||
|
||||
if restic backup $excludeOptions "$APP_PATH" --tag core_files --tag full_backup; then
|
||||
echo "[$(date +'%Y-%m-%d %H:%M:%S')] Core files backup completed successfully." | tee -a "$log_file"
|
||||
else
|
||||
echo "[$(date +'%Y-%m-%d %H:%M:%S')] ERROR: Core files backup failed." | tee -a "$log_file"
|
||||
fi
|
||||
}
|
||||
|
||||
backup_media_themes() {
|
||||
local log_file="${LOG_DIR}/backup_media_themes_$(date +'%Y-%m-%d').log"
|
||||
echo "[$(date +'%Y-%m-%d %H:%M:%S')] Starting Media and Themes Backup" | tee -a "$log_file"
|
||||
local includePaths=("$APP_PATH/wp-content/uploads")
|
||||
|
||||
for path in "${includePaths[@]}"; do
|
||||
if restic backup "$path" --tag media_themes --tag full_backup; then
|
||||
echo "[$(date +'%Y-%m-%d %H:%M:%S')] Backup completed successfully for $path." | tee -a "$log_file"
|
||||
else
|
||||
echo "[$(date +'%Y-%m-%d %H:%M:%S')] ERROR: Backup failed for $path." | tee -a "$log_file"
|
||||
fi
|
||||
done
|
||||
}
|
||||
|
||||
backup_database() {
|
||||
local log_file="${LOG_DIR}/backup_database_$(date +'%Y-%m-%d').log"
|
||||
echo "[$(date +'%Y-%m-%d %H:%M:%S')] Starting Database Backup" | tee -a "$log_file"
|
||||
|
||||
# Correctly pass the password to mysqldump
|
||||
if mysqldump -u "$BACKUP_USER" --password="$BACKUP_PASSWORD" "$DB_NAME" | restic backup --stdin --tag wordpress_db --tag full_backup; then
|
||||
echo "[$(date +'%Y-%m-%d %H:%M:%S')] Database backup completed successfully." | tee -a "$log_file"
|
||||
else
|
||||
echo "[$(date +'%Y-%m-%d %H:%M:%S')] ERROR: Database backup failed." | tee -a "$log_file"
|
||||
fi
|
||||
}
|
||||
|
||||
# Execute backup functions
|
||||
backup_core_files
|
||||
backup_media_themes
|
||||
backup_database
|
||||
|
||||
|
|
@ -0,0 +1,47 @@
|
|||
#!/bin/bash
|
||||
|
||||
# Check for required arguments
|
||||
if [ $# -ne 2 ]; then
|
||||
echo "Usage: $0 <RESTIC_PASSWORD> <ADDITIONAL_TAG>"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Assign arguments to variables
|
||||
RESTIC_PASSWORD="$1"
|
||||
ADDITIONAL_TAG="$2"
|
||||
|
||||
# Configuration
|
||||
APP_PATH='/var/www/webroot/ROOT'
|
||||
backupPath='/mnt/backups'
|
||||
LOG_DIR="/home/jelastic/mb-backups/logs"
|
||||
LOG_FILE="${LOG_DIR}/backup_core_files_$(date +'%Y-%m-%d').log"
|
||||
excludePaths=(
|
||||
"$APP_PATH/wp-content/uploads"
|
||||
)
|
||||
|
||||
# Ensure log directory exists
|
||||
mkdir -p "$LOG_DIR"
|
||||
|
||||
# Set Restic environment variables
|
||||
export RESTIC_REPOSITORY="$backupPath"
|
||||
export RESTIC_PASSWORD
|
||||
|
||||
# Logging start
|
||||
echo "[$(date +'%Y-%m-%d %H:%M:%S')] Starting Core Files Backup with tags: core_files, $ADDITIONAL_TAG" | tee -a "$LOG_FILE"
|
||||
|
||||
# Building exclude options
|
||||
excludeOptions=""
|
||||
for path in "${excludePaths[@]}"; do
|
||||
excludeOptions+="--exclude $path "
|
||||
done
|
||||
|
||||
# Perform backup with both tags
|
||||
if restic backup $excludeOptions "$APP_PATH" --tag core_files --tag "$ADDITIONAL_TAG"; then
|
||||
echo "[$(date +'%Y-%m-%d %H:%M:%S')] Core files backup completed successfully." | tee -a "$LOG_FILE"
|
||||
else
|
||||
echo "[$(date +'%Y-%m-%d %H:%M:%S')] ERROR: Core files backup failed." | tee -a "$LOG_FILE"
|
||||
fi
|
||||
|
||||
# Logging end
|
||||
echo "[$(date +'%Y-%m-%d %H:%M:%S')] Backup process finished." | tee -a "$LOG_FILE"
|
||||
|
|
@ -0,0 +1,46 @@
|
|||
#!/bin/bash
|
||||
|
||||
# Validate input parameters
|
||||
if [ "$#" -ne 2 ]; then
|
||||
echo "Usage: $0 <RESTIC_PASSWORD> <ADDITIONAL_TAG>"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Assign command line arguments to variables
|
||||
RESTIC_PASSWORD="$1"
|
||||
ADDITIONAL_TAG="$2"
|
||||
|
||||
# Configuration
|
||||
APP_PATH='/var/www/webroot/ROOT'
|
||||
WP_CONFIG="${APP_PATH}/wp-config.php"
|
||||
backupPath='/mnt/backups'
|
||||
LOG_DIR="/home/jelastic/mb-backups/logs"
|
||||
LOG_FILE="${LOG_DIR}/backup_database_$(date +'%Y-%m-%d').log"
|
||||
DB_NAME=$(grep "define( 'DB_NAME'" $WP_CONFIG | cut -d "'" -f 4)
|
||||
DB_USER=$(grep "define( 'DB_USER'" $WP_CONFIG | cut -d "'" -f 4)
|
||||
DB_PASSWORD=$(grep "define( 'DB_PASSWORD'" $WP_CONFIG | cut -d "'" -f 4)
|
||||
|
||||
# Backup user and password
|
||||
BACKUP_USER='wp_backup'
|
||||
BACKUP_PASSWORD='gaQjveXl24Xo66w'
|
||||
|
||||
# Ensure log directory exists
|
||||
mkdir -p "$LOG_DIR"
|
||||
|
||||
# Set Restic environment variables
|
||||
export RESTIC_REPOSITORY="$backupPath"
|
||||
export RESTIC_PASSWORD # Updated to use the command line argument
|
||||
export MYSQL_PWD=$BACKUP_PASSWORD # Use the backup user's password for mysqldump
|
||||
|
||||
# Logging start
|
||||
echo "[$(date +'%Y-%m-%d %H:%M:%S')] Starting Database Backup with additional tag: $ADDITIONAL_TAG" | tee -a "$LOG_FILE"
|
||||
|
||||
# Perform backup with additional tag
|
||||
if mysqldump -u "$BACKUP_USER" "$DB_NAME" | restic backup --stdin --tag wordpress_db --tag "$ADDITIONAL_TAG"; then
|
||||
echo "[$(date +'%Y-%m-%d %H:%M:%S')] Database backup completed successfully with tags: wordpress_db, $ADDITIONAL_TAG." | tee -a "$LOG_FILE"
|
||||
else
|
||||
echo "[$(date +'%Y-%m-%d %H:%M:%S')] ERROR: Database backup failed." | tee -a "$LOG_FILE"
|
||||
fi
|
||||
|
||||
# Logging end
|
||||
echo "[$(date +'%Y-%m-%d %H:%M:%S')] Database Backup process finished." | tee -a "$LOG_FILE"
|
|
@ -0,0 +1,40 @@
|
|||
#!/bin/bash
|
||||
|
||||
# Check for required arguments
|
||||
if [ "$#" -ne 2 ]; then
|
||||
echo "Usage: $0 <RESTIC_PASSWORD> <ADDITIONAL_TAG>"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Assign arguments to variables
|
||||
RESTIC_PASSWORD="$1"
|
||||
ADDITIONAL_TAG="$2"
|
||||
|
||||
# Configuration
|
||||
APP_PATH='/var/www/webroot/ROOT'
|
||||
backupPath='/mnt/backups'
|
||||
LOG_DIR="/home/jelastic/mb-backups/logs/manual/media"
|
||||
LOG_FILE="${LOG_DIR}/backup_media_$(date +'%Y-%m-%d').log"
|
||||
includePaths=("$APP_PATH/wp-content/uploads")
|
||||
|
||||
# Ensure log directory exists
|
||||
mkdir -p "$LOG_DIR"
|
||||
|
||||
# Set Restic environment variables
|
||||
export RESTIC_REPOSITORY="$backupPath"
|
||||
export RESTIC_PASSWORD
|
||||
|
||||
# Logging start
|
||||
echo "[$(date +'%Y-%m-%d %H:%M:%S')] Starting Media Backup" | tee -a "$LOG_FILE"
|
||||
|
||||
# Perform backup with additional tag
|
||||
for path in "${includePaths[@]}"; do
|
||||
if restic backup "$path" --tag media_themes --tag "$ADDITIONAL_TAG"; then
|
||||
echo "[$(date +'%Y-%m-%d %H:%M:%S')] Backup completed successfully for $path with tags: media_themes, $ADDITIONAL_TAG." | tee -a "$LOG_FILE"
|
||||
else
|
||||
echo "[$(date +'%Y-%m-%d %H:%M:%S')] ERROR: Backup failed for $path." | tee -a "$LOG_FILE"
|
||||
fi
|
||||
done
|
||||
|
||||
# Logging end
|
||||
echo "[$(date +'%Y-%m-%d %H:%M:%S')] Media and Themes Backup process finished." | tee -a "$LOG_FILE"
|
|
@ -0,0 +1,16 @@
|
|||
#!/bin/bash
|
||||
|
||||
# Script to check for scheduled cron jobs for /home/litespeed/mb-backups/backup_all.sh
|
||||
|
||||
# Define the script path to check in cron jobs
|
||||
SCRIPT_PATH="/home/litespeed/mb-backups/backup_all.sh"
|
||||
|
||||
# Use crontab -l to list all cron jobs, then grep to check for the specific script path
|
||||
CRON_JOB=$(crontab -l | grep -F "$SCRIPT_PATH")
|
||||
|
||||
if [ -z "$CRON_JOB" ]; then
|
||||
echo "Automated Backups is not enabled."
|
||||
else
|
||||
echo "$CRON_JOB" | awk '{print "Schedule: " $1, $2, $3, $4, $5}'
|
||||
# Note: This script stops here, providing the schedule. Computing the next run time in a human-readable format is not straightforward in bash without external tools.
|
||||
fi
|
|
@ -0,0 +1,62 @@
|
|||
#!/bin/bash
|
||||
|
||||
# Configuration
|
||||
BACKUP_SCRIPT="/home/litespeed/mb-backups/backup_all.sh"
|
||||
LOG_DIR="/home/litespeed/mb-backups/logs/auto"
|
||||
ACTION_LOG_FILE="${LOG_DIR}/schedule_actions.log"
|
||||
BACKUP_LOG_PREFIX="${LOG_DIR}/backup_"
|
||||
|
||||
# Ensure the log directory exists
|
||||
mkdir -p "$LOG_DIR"
|
||||
|
||||
log_action() {
|
||||
echo "[$(date +'%Y-%m-%d %H:%M:%S')] $1" >> "$ACTION_LOG_FILE"
|
||||
}
|
||||
|
||||
# Function to add or update the cron job with dynamic logging
|
||||
add_update_cron_job() {
|
||||
# Verify Restic password is provided
|
||||
if [ -z "$3" ]; then
|
||||
echo "Restic password is required."
|
||||
log_action "Attempted to add/update a schedule without providing a Restic password."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Prepare the cron command to include dynamic date in the backup log filename
|
||||
CMD="RESTIC_PASSWORD=\"$3\" $BACKUP_SCRIPT > \"${BACKUP_LOG_PREFIX}\$(date +\\%Y-\\%m-\\%d_\\%H-\\%M-\\%S).log\" 2>&1"
|
||||
|
||||
# Add or update the cron job
|
||||
(crontab -l | grep -v "$BACKUP_SCRIPT" 2>/dev/null; echo "$2 $CMD") | crontab -
|
||||
local update_msg="Backup schedule updated to: $2"
|
||||
echo "$update_msg"
|
||||
log_action "$update_msg"
|
||||
}
|
||||
|
||||
# Function to remove the cron job
|
||||
remove_cron_job() {
|
||||
crontab -l | grep -v "$BACKUP_SCRIPT" | crontab -
|
||||
local remove_msg="Backup schedule removed."
|
||||
echo "$remove_msg"
|
||||
log_action "$remove_msg"
|
||||
}
|
||||
|
||||
# Main logic to add, update, or remove the cron job based on user input
|
||||
case $1 in
|
||||
add|update)
|
||||
if [ "$#" -ne 3 ]; then
|
||||
echo "Usage for add/update: $0 {add|update} 'schedule' 'restic_password'"
|
||||
echo "Example: $0 add '0 1 * * *' 'secret_password'"
|
||||
log_action "Incorrect usage for add/update. Correct format not followed."
|
||||
else
|
||||
add_update_cron_job "$@"
|
||||
fi
|
||||
;;
|
||||
remove)
|
||||
remove_cron_job
|
||||
;;
|
||||
*)
|
||||
echo "Invalid action: $1. Use add, update, or remove."
|
||||
log_action "Invalid action attempted: $1"
|
||||
exit 1
|
||||
;;
|
||||
esac
|
|
@ -0,0 +1,62 @@
|
|||
#!/bin/bash
|
||||
|
||||
# Validate input parameters
|
||||
if [ "$#" -ne 2 ]; then
|
||||
echo "Usage: $0 <snapshot_id> <restic_password>"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Assign input to variables
|
||||
SNAPSHOT_ID=$1
|
||||
RESTIC_PASSWORD=$2
|
||||
RESTIC_REPOSITORY="/mnt/backups"
|
||||
LOG_DIR="/home/litespeed/mb-backups/logs/restore"
|
||||
WP_CONFIG='/var/www/webroot/ROOT/wp-config.php'
|
||||
|
||||
# Set up the environment
|
||||
export RESTIC_PASSWORD
|
||||
mkdir -p "$LOG_DIR" # Ensure the log directory exists
|
||||
LOG_FILE="${LOG_DIR}/restore_$(date +'%Y-%m-%d_%H-%M-%S').log"
|
||||
|
||||
# Extracting database credentials from wp-config.php
|
||||
DB_NAME=$(grep "define( 'DB_NAME'" $WP_CONFIG | cut -d "'" -f 4)
|
||||
DB_USER=$(grep "define( 'DB_USER'" $WP_CONFIG | cut -d "'" -f 4)
|
||||
DB_PASSWORD=$(grep "define( 'DB_PASSWORD'" $WP_CONFIG | cut -d "'" -f 4)
|
||||
|
||||
# Logging function
|
||||
log() {
|
||||
echo "$1" | tee -a "$LOG_FILE"
|
||||
}
|
||||
|
||||
log "Starting restoration for snapshot $SNAPSHOT_ID..."
|
||||
|
||||
# Attempt to extract the path and tags for the specified snapshot ID
|
||||
SNAPSHOT_DATA=$(restic -r "$RESTIC_REPOSITORY" snapshots --json | jq -r ".[] | select(.short_id == \"$SNAPSHOT_ID\")")
|
||||
SNAPSHOT_PATH=$(echo "$SNAPSHOT_DATA" | jq -r ".paths[]")
|
||||
SNAPSHOT_TAGS=$(echo "$SNAPSHOT_DATA" | jq -r ".tags[]")
|
||||
|
||||
echo "Snapshot data: Path=$SNAPSHOT_PATH, Tags=$SNAPSHOT_TAGS" | tee -a "$LOG_FILE"
|
||||
|
||||
if [[ "$SNAPSHOT_TAGS" == *"wordpress_db"* ]] && [[ "$SNAPSHOT_PATH" == "/stdin" ]]; then
|
||||
log "Detected database backup. Starting restoration process for database $DB_NAME..."
|
||||
if restic -r "$RESTIC_REPOSITORY" dump "$SNAPSHOT_ID" stdin | mysql -u "$DB_USER" -p"$DB_PASSWORD" "$DB_NAME"; then
|
||||
log "Restoration of snapshot $SNAPSHOT_ID with TAG: wordpress_db completed successfully."
|
||||
else
|
||||
log "Failed to restore database from Snapshot ID: $SNAPSHOT_ID. Please check the log file for details: $LOG_FILE"
|
||||
exit 1
|
||||
fi
|
||||
else
|
||||
if [ -z "$SNAPSHOT_PATH" ] || [ "$SNAPSHOT_PATH" = "null" ]; then
|
||||
log "Failed to find a valid path for snapshot ID $SNAPSHOT_ID. Check the snapshot ID and try again."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
log "Restoring snapshot $SNAPSHOT_ID to $SNAPSHOT_PATH..."
|
||||
if restic -r "$RESTIC_REPOSITORY" restore "$SNAPSHOT_ID" --target "$SNAPSHOT_PATH"; then
|
||||
log "Restoration of snapshot $SNAPSHOT_ID to $SNAPSHOT_PATH completed successfully."
|
||||
else
|
||||
log "Failed to restore Snapshot ID: $SNAPSHOT_ID to PATH: $SNAPSHOT_PATH. Please check the log file for details: $LOG_FILE"
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
|
|
@ -0,0 +1,30 @@
|
|||
#!/bin/bash
|
||||
|
||||
# Display usage if no tag is provided
|
||||
if [ "$#" -ne 1 ]; then
|
||||
echo "Usage: $0 <tag>"
|
||||
echo "Available tags: main_backup, wordpress_db, core_files, media_themes, full_backup"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
TAG=$1
|
||||
backupPath='/mnt/backups'
|
||||
|
||||
# Embedded Restic repository password
|
||||
RESTIC_PASSWORD="tonysite1" # Replace this with your actual password
|
||||
|
||||
export RESTIC_REPOSITORY="$backupPath"
|
||||
export RESTIC_PASSWORD
|
||||
|
||||
# Validate the provided tag against known tags
|
||||
case "$TAG" in
|
||||
main_backup|wordpress_db|core_files|media_themes|full_backup)
|
||||
# Use the --json flag to output the snapshots in JSON format
|
||||
restic -r $RESTIC_REPOSITORY snapshots --tag "$TAG" --json
|
||||
;;
|
||||
*)
|
||||
echo "Error: Unknown tag '$TAG'."
|
||||
echo "Available tags: main_backup, wordpress_db, core_files, media_themes, full_backup"
|
||||
exit 1
|
||||
;;
|
||||
esac
|
Loading…
Reference in New Issue