Update backup and restore scripts
Deploy / Deploy (push) Successful in 3m48s

This commit is contained in:
2026-09-15 18:59:53 +01:00
parent 7764e661be
commit 79f7910e4a
2 changed files with 93 additions and 1 deletions
+33
View File
@@ -4,6 +4,8 @@
## The number of backups to keep ## The number of backups to keep
BACKUPS_KEEP=24 BACKUPS_KEEP=24
CONTAINER_USER_ID="2015"
# Global variables (Do NOT change) # Global variables (Do NOT change)
CLEANUP_FABRIC=false CLEANUP_FABRIC=false
CLEANUP_LUCKPERMS=false CLEANUP_LUCKPERMS=false
@@ -18,6 +20,7 @@ main() {
broadcast_status started broadcast_status started
backup_beta || cleanup_failure
backup_fabric || cleanup_failure backup_fabric || cleanup_failure
backup_luckperms || cleanup_failure backup_luckperms || cleanup_failure
backup_paper || cleanup_failure backup_paper || cleanup_failure
@@ -63,6 +66,9 @@ broadcast_status() {
STATUS="$1" STATUS="$1"
log_info "Broadcasting backup status: $STATUS" log_info "Broadcasting backup status: $STATUS"
if docker compose exec -T beta true > /dev/null 2>&1; then
docker compose exec -u "$CONTAINER_USER_ID" -T beta mc-send-to-console "say Backup $STATUS." > /dev/null 2>&1
fi
if docker compose exec -T fabric true > /dev/null 2>&1; then if docker compose exec -T fabric true > /dev/null 2>&1; then
docker compose exec -T fabric rcon-cli "tellraw @a [{\"text\":\"Server\",\"color\":\"light_purple\"},{\"text\":\": Backup $STATUS.\",\"color\":\"white\"}]" > /dev/null 2>&1 docker compose exec -T fabric rcon-cli "tellraw @a [{\"text\":\"Server\",\"color\":\"light_purple\"},{\"text\":\": Backup $STATUS.\",\"color\":\"white\"}]" > /dev/null 2>&1
fi fi
@@ -71,6 +77,28 @@ broadcast_status() {
fi fi
} }
backup_beta() {
log_info "Starting Beta backup..."
CLEANUP_BETA=false
if docker compose exec -T beta true > /dev/null 2>&1; then
CLEANUP_BETA=true
log_info "Beta server detected, disabling saves"
docker compose exec -u "$CONTAINER_USER_ID" -T beta mc-send-to-console "save-off" > /dev/null 2>&1
docker compose exec -u "$CONTAINER_USER_ID" -T beta mc-send-to-console "save-all" > /dev/null 2>&1
fi
docker compose run --rm init sh -c '
mkdir -p "$1"/beta_data &&
cp -a --reflink=auto /beta_data/world "$1"/beta_data &&
cp -a --reflink=auto /beta_data/white-list.txt "$1"/beta_data &&
cp -a --reflink=auto /beta_data/ops.txt "$1"/beta_data
' -- "$BACKUP_DIR" || return 1
log_info "Finished Beta backup"
}
backup_fabric() { backup_fabric() {
log_info "Starting Fabric backup..." log_info "Starting Fabric backup..."
@@ -240,6 +268,11 @@ cleanup() {
# Ignore specified conditions to ensure cleanup runs to completion uninterrupted # Ignore specified conditions to ensure cleanup runs to completion uninterrupted
trap '' HUP INT QUIT ABRT TERM trap '' HUP INT QUIT ABRT TERM
if [ "$CLEANUP_BETA" = true ]; then
log_info "Re-enabling Beta saves"
docker compose exec -u "$CONTAINER_USER_ID" -T beta mc-send-to-console "save-on" > /dev/null 2>&1
fi
if [ "$CLEANUP_FABRIC" = true ]; then if [ "$CLEANUP_FABRIC" = true ]; then
log_info "Re-enabling Fabric saves" log_info "Re-enabling Fabric saves"
docker compose exec -T fabric rcon-cli save-on > /dev/null 2>&1 docker compose exec -T fabric rcon-cli save-on > /dev/null 2>&1
+60 -1
View File
@@ -21,6 +21,10 @@ Commands:
Restore options: Restore options:
--all --all
--beta
--beta-ops
--beta-whitelist
--beta-world
--fabric --fabric
--fabric-essentials --fabric-essentials
--fabric-g4mespeed --fabric-g4mespeed
@@ -59,6 +63,10 @@ cmd_restore() {
CLEANUP_VOLUMES=0 CLEANUP_VOLUMES=0
# Default flags # Default flags
## Beta server
RESTORE_BETA_OPS=0
RESTORE_BETA_WHITELIST=0
RESTORE_BETA_WORLD=0
## Fabric server ## Fabric server
RESTORE_FABRIC_ESSENTIALS=0 RESTORE_FABRIC_ESSENTIALS=0
RESTORE_FABRIC_G4MESPEED=0 RESTORE_FABRIC_G4MESPEED=0
@@ -85,6 +93,9 @@ cmd_restore() {
while [ $# -gt 0 ]; do while [ $# -gt 0 ]; do
case "$1" in case "$1" in
--all) --all)
RESTORE_BETA_OPS=1
RESTORE_BETA_WHITELIST=1
RESTORE_BETA_WORLD=1
RESTORE_FABRIC_ESSENTIALS=1 RESTORE_FABRIC_ESSENTIALS=1
RESTORE_FABRIC_G4MESPEED=1 RESTORE_FABRIC_G4MESPEED=1
RESTORE_FABRIC_WORLD=1 RESTORE_FABRIC_WORLD=1
@@ -102,6 +113,24 @@ cmd_restore() {
RESTORE_VELOCITY_GLOBAL_WHITELIST=1 RESTORE_VELOCITY_GLOBAL_WHITELIST=1
;; ;;
--beta)
RESTORE_BETA_OPS=1
RESTORE_BETA_WHITELIST=1
RESTORE_BETA_WORLD=1
;;
--beta-ops)
RESTORE_BETA_OPS=1
;;
--beta-whitelist)
RESTORE_BETA_WHITELIST=1
;;
--beta-world)
RESTORE_BETA_WORLD=1
;;
--fabric) --fabric)
RESTORE_FABRIC_ESSENTIALS=1 RESTORE_FABRIC_ESSENTIALS=1
RESTORE_FABRIC_G4MESPEED=1 RESTORE_FABRIC_G4MESPEED=1
@@ -235,7 +264,10 @@ cmd_restore() {
BACKUP_ID=$(basename "$BACKUP_DIR") BACKUP_ID=$(basename "$BACKUP_DIR")
# Validate options # Validate options
if [ "$RESTORE_FABRIC_ESSENTIALS" -eq 0 ] \ if [ "$RESTORE_BETA_OPS" -eq 0 ] \
&& [ "$RESTORE_BETA_WHITELIST" -eq 0 ] \
&& [ "$RESTORE_BETA_WORLD" -eq 0 ] \
&& [ "$RESTORE_FABRIC_ESSENTIALS" -eq 0 ] \
&& [ "$RESTORE_FABRIC_G4MESPEED" -eq 0 ] \ && [ "$RESTORE_FABRIC_G4MESPEED" -eq 0 ] \
&& [ "$RESTORE_FABRIC_WORLD" -eq 0 ] \ && [ "$RESTORE_FABRIC_WORLD" -eq 0 ] \
&& [ "$RESTORE_LUCKPERMS" -eq 0 ] \ && [ "$RESTORE_LUCKPERMS" -eq 0 ] \
@@ -263,6 +295,7 @@ cmd_restore() {
trap restore_cleanup_trap HUP INT QUIT ABRT TERM trap restore_cleanup_trap HUP INT QUIT ABRT TERM
create_snapshot || restore_cleanup_failure create_snapshot || restore_cleanup_failure
restore_beta || restore_cleanup_failure
restore_fabric || restore_cleanup_failure restore_fabric || restore_cleanup_failure
restore_luckperms || restore_cleanup_failure restore_luckperms || restore_cleanup_failure
restore_paper || restore_cleanup_failure restore_paper || restore_cleanup_failure
@@ -280,6 +313,7 @@ create_snapshot() {
# Map: source volume name -> cloned volume name # Map: source volume name -> cloned volume name
# Source names must match the mount points inside init # Source names must match the mount points inside init
declare -Ag VOLUMES=( declare -Ag VOLUMES=(
[beta_data]="beta_data_$BACKUP_ID"
[fabric_data]="fabric_data_$BACKUP_ID" [fabric_data]="fabric_data_$BACKUP_ID"
[luckperms_data]="luckperms_data_$BACKUP_ID" [luckperms_data]="luckperms_data_$BACKUP_ID"
[paper_data]="paper_data_$BACKUP_ID" [paper_data]="paper_data_$BACKUP_ID"
@@ -304,6 +338,7 @@ create_snapshot() {
"${MOUNTS[@]}" \ "${MOUNTS[@]}" \
init sh -ec ' init sh -ec '
for DIR in \ for DIR in \
beta_data \
fabric_data \ fabric_data \
luckperms_data \ luckperms_data \
paper_data \ paper_data \
@@ -321,6 +356,29 @@ create_snapshot() {
echo "Created snapshot successfully" echo "Created snapshot successfully"
} }
restore_beta() {
if [ "$RESTORE_BETA_OPS" -eq 1 ]; then
echo "Restoring Beta server's op list..."
docker compose run --rm init sh -c '
cp -a --reflink=auto "$1"/beta_data/ops.txt /beta_data
' -- "$BACKUP_DIR" || return 1
fi
if [ "$RESTORE_BETA_WHITELIST" -eq 1 ]; then
echo "Restoring Beta server's whitelist..."
docker compose run --rm init sh -c '
cp -a --reflink=auto "$1"/beta_data/white-list.txt /beta_data
' -- "$BACKUP_DIR" || return 1
fi
if [ "$RESTORE_BETA_WORLD" -eq 1 ]; then
echo "Restoring Beta server's world..."
docker compose run --rm init sh -c '
cp -a --reflink=auto "$1"/beta_data/world /beta_data
' -- "$BACKUP_DIR" || return 1
fi
}
restore_fabric() { restore_fabric() {
if [ "$RESTORE_FABRIC_ESSENTIALS" -eq 1 ]; then if [ "$RESTORE_FABRIC_ESSENTIALS" -eq 1 ]; then
echo "Restoring Fabric server's Essentials mod data..." echo "Restoring Fabric server's Essentials mod data..."
@@ -484,6 +542,7 @@ restore_cleanup() {
"${MOUNTS[@]}" \ "${MOUNTS[@]}" \
init sh -ec ' init sh -ec '
for DIR in \ for DIR in \
beta_data \
fabric_data \ fabric_data \
luckperms_data \ luckperms_data \
paper_data \ paper_data \