Bug fixes for deleting methods
This commit is contained in:
parent
8cf268f40b
commit
94e894645f
5 changed files with 25 additions and 29 deletions
|
@ -1,4 +1,4 @@
|
||||||
#!/bin/env bash
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
# Minecraft server automatic backup management script
|
# Minecraft server automatic backup management script
|
||||||
# by Nicolas Chan
|
# by Nicolas Chan
|
||||||
|
@ -27,6 +27,7 @@ SUPPRESS_WARNINGS=false # Suppress warnings
|
||||||
DATE_FORMAT="%F_%H-%M-%S"
|
DATE_FORMAT="%F_%H-%M-%S"
|
||||||
TIMESTAMP=$(date +$DATE_FORMAT)
|
TIMESTAMP=$(date +$DATE_FORMAT)
|
||||||
|
|
||||||
|
OPTIND=1
|
||||||
while getopts 'a:bcd:e:f:ghi:l:m:o:p:qs:v' FLAG; do
|
while getopts 'a:bcd:e:f:ghi:l:m:o:p:qs:v' FLAG; do
|
||||||
case $FLAG in
|
case $FLAG in
|
||||||
a) COMPRESSION_ALGORITHM=$OPTARG ;;
|
a) COMPRESSION_ALGORITHM=$OPTARG ;;
|
||||||
|
@ -68,7 +69,9 @@ done
|
||||||
BASE_DIR=$(dirname "$(realpath "$0")")
|
BASE_DIR=$(dirname "$(realpath "$0")")
|
||||||
|
|
||||||
# shellcheck source=src/logging.sh
|
# shellcheck source=src/logging.sh
|
||||||
source "$BASE_DIR/src/logging.sh"
|
source "$BASE_DIR/src/logging.sh" \
|
||||||
|
-q "$SUPPRESS_WARNINGS" \
|
||||||
|
-v "$DEBUG"
|
||||||
|
|
||||||
# Check for missing encouraged arguments
|
# Check for missing encouraged arguments
|
||||||
if [[ $SCREEN_NAME == "" ]]; then
|
if [[ $SCREEN_NAME == "" ]]; then
|
||||||
|
|
|
@ -23,16 +23,14 @@ mkdir -p "$BACKUP_DIRECTORY"
|
||||||
|
|
||||||
# Parse file timestamp to one readable by "date"
|
# Parse file timestamp to one readable by "date"
|
||||||
parse-file-timestamp () {
|
parse-file-timestamp () {
|
||||||
local DATE_STRING
|
echo "$1" | awk -F_ '{gsub(/-/,":",$2); print $1" "$2}'
|
||||||
DATE_STRING=$(echo "$1" | awk -F_ '{gsub(/-/,":",$2); print $1" "$2}')
|
|
||||||
echo "$DATE_STRING"
|
|
||||||
}
|
}
|
||||||
|
|
||||||
# Delete a backup
|
# Delete a backup
|
||||||
delete-backup () {
|
delete-backup () {
|
||||||
local BACKUP=$1
|
local BACKUP=$1
|
||||||
rm -f "$BACKUP_DIRECTORY/$BACKUP"
|
rm -f "$BACKUP_DIRECTORY/$BACKUP"
|
||||||
message-players "Deleted old backup" "$BACKUP"
|
echo "Deleted old backup" "$BACKUP"
|
||||||
}
|
}
|
||||||
|
|
||||||
# Sequential delete method
|
# Sequential delete method
|
||||||
|
@ -44,9 +42,9 @@ delete-sequentially () {
|
||||||
BASENAME=$(basename "$BACKUP_NAME")
|
BASENAME=$(basename "$BACKUP_NAME")
|
||||||
BACKUPS_UNSORTED+=("$BASENAME")
|
BACKUPS_UNSORTED+=("$BASENAME")
|
||||||
done
|
done
|
||||||
local BACKUPS=()
|
|
||||||
# List oldest first
|
# List oldest first
|
||||||
while IFS='' read -r line; do BACKUPS+=("$line"); done < <(IFS=$'\n' sort <<<"${BACKUPS_UNSORTED[*]}")
|
# shellcheck disable=SC2207
|
||||||
|
IFS=$'\n' BACKUPS=($(sort <<<"${BACKUPS_UNSORTED[*]}"))
|
||||||
|
|
||||||
while [[ $MAX_BACKUPS -ge 0 && ${#BACKUPS[@]} -gt $MAX_BACKUPS ]]; do
|
while [[ $MAX_BACKUPS -ge 0 && ${#BACKUPS[@]} -gt $MAX_BACKUPS ]]; do
|
||||||
delete-backup "${BACKUPS[0]}"
|
delete-backup "${BACKUPS[0]}"
|
||||||
|
@ -57,9 +55,9 @@ delete-sequentially () {
|
||||||
BASENAME=$(basename "$BACKUP_NAME")
|
BASENAME=$(basename "$BACKUP_NAME")
|
||||||
BACKUPS_UNSORTED+=("$BASENAME")
|
BACKUPS_UNSORTED+=("$BASENAME")
|
||||||
done
|
done
|
||||||
local BACKUPS=()
|
|
||||||
# List oldest first
|
# List oldest first
|
||||||
while IFS='' read -r line; do BACKUPS+=("$line"); done < <(IFS=$'\n' sort <<<"${BACKUPS_UNSORTED[*]}")
|
# shellcheck disable=SC2207
|
||||||
|
IFS=$'\n' BACKUPS=($(sort <<<"${BACKUPS_UNSORTED[*]}"))
|
||||||
done
|
done
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -107,6 +105,7 @@ delete-thinning () {
|
||||||
fi
|
fi
|
||||||
|
|
||||||
local CURRENT_INDEX=0
|
local CURRENT_INDEX=0
|
||||||
|
|
||||||
local BACKUPS_UNSORTED_RAW=("$BACKUP_DIRECTORY"/*)
|
local BACKUPS_UNSORTED_RAW=("$BACKUP_DIRECTORY"/*)
|
||||||
local BACKUPS_UNSORTED=()
|
local BACKUPS_UNSORTED=()
|
||||||
for BACKUP_NAME in "${BACKUPS_UNSORTED_RAW[@]}"; do
|
for BACKUP_NAME in "${BACKUPS_UNSORTED_RAW[@]}"; do
|
||||||
|
@ -114,9 +113,9 @@ delete-thinning () {
|
||||||
BASENAME=$(basename "$BACKUP_NAME")
|
BASENAME=$(basename "$BACKUP_NAME")
|
||||||
BACKUPS_UNSORTED+=("$BASENAME")
|
BACKUPS_UNSORTED+=("$BASENAME")
|
||||||
done
|
done
|
||||||
local BACKUPS=()
|
|
||||||
# List newest first
|
# List newest first
|
||||||
while IFS='' read -r line; do BACKUPS+=("$line"); done < <(IFS=$'\n' sort -r <<<"${BACKUPS_UNSORTED[*]}")
|
# shellcheck disable=SC2207
|
||||||
|
IFS=$'\n' BACKUPS=($(sort -r <<<"${BACKUPS_UNSORTED[*]}"))
|
||||||
|
|
||||||
for BLOCK_INDEX in "${!BLOCK_SIZES[@]}"; do
|
for BLOCK_INDEX in "${!BLOCK_SIZES[@]}"; do
|
||||||
local BLOCK_SIZE=${BLOCK_SIZES[BLOCK_INDEX]}
|
local BLOCK_SIZE=${BLOCK_SIZES[BLOCK_INDEX]}
|
||||||
|
@ -130,14 +129,8 @@ delete-thinning () {
|
||||||
|
|
||||||
local OLDEST_BACKUP_TIMESTAMP
|
local OLDEST_BACKUP_TIMESTAMP
|
||||||
OLDEST_BACKUP_TIMESTAMP=$(parse-file-timestamp "${OLDEST_BACKUP_IN_BLOCK:0:19}")
|
OLDEST_BACKUP_TIMESTAMP=$(parse-file-timestamp "${OLDEST_BACKUP_IN_BLOCK:0:19}")
|
||||||
local BLOCK_COMMAND="$BLOCK_FUNCTION $OLDEST_BACKUP_TIMESTAMP"
|
|
||||||
|
|
||||||
if $BLOCK_COMMAND; then
|
if ! $BLOCK_FUNCTION "$OLDEST_BACKUP_TIMESTAMP"; then
|
||||||
# Oldest backup in this block satisfies the condition for placement in the next block
|
|
||||||
if $DEBUG; then
|
|
||||||
echo "$OLDEST_BACKUP_IN_BLOCK promoted to next block"
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
# Oldest backup in this block does not satisfy the condition for placement in next block
|
# Oldest backup in this block does not satisfy the condition for placement in next block
|
||||||
delete-backup "$OLDEST_BACKUP_IN_BLOCK"
|
delete-backup "$OLDEST_BACKUP_IN_BLOCK"
|
||||||
break
|
break
|
||||||
|
|
10
src/core.sh
10
src/core.sh
|
@ -1,12 +1,5 @@
|
||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
# Minecraft server automatic backup management script
|
|
||||||
# by Nicolas Chan
|
|
||||||
# https://github.com/nicolaschan/minecraft-backup
|
|
||||||
# MIT License
|
|
||||||
#
|
|
||||||
# For most convenience, run automatically with cron.
|
|
||||||
|
|
||||||
# This script implements the core functionality, and expects the following
|
# This script implements the core functionality, and expects the following
|
||||||
# functions to be defined by the method scripts:
|
# functions to be defined by the method scripts:
|
||||||
#
|
#
|
||||||
|
@ -35,6 +28,7 @@ while [[ $1 != "--" ]]; do
|
||||||
done
|
done
|
||||||
shift
|
shift
|
||||||
|
|
||||||
|
OPTIND=1
|
||||||
while getopts 'c:g:p:q:v:' FLAG; do
|
while getopts 'c:g:p:q:v:' FLAG; do
|
||||||
case $FLAG in
|
case $FLAG in
|
||||||
c) ENABLE_CHAT_MESSAGES=$OPTARG ;;
|
c) ENABLE_CHAT_MESSAGES=$OPTARG ;;
|
||||||
|
@ -124,7 +118,7 @@ message-players-color () {
|
||||||
local HOVER_MESSAGE=$3
|
local HOVER_MESSAGE=$3
|
||||||
log-info "$MESSAGE ($HOVER_MESSAGE)"
|
log-info "$MESSAGE ($HOVER_MESSAGE)"
|
||||||
if $ENABLE_CHAT_MESSAGES; then
|
if $ENABLE_CHAT_MESSAGES; then
|
||||||
execute_command \
|
execute-command \
|
||||||
"tellraw @a [\"\",{\"text\":\"[$PREFIX] \",\"color\":\"gray\",\"italic\":true},{\"text\":\"$MESSAGE\",\"color\":\"$COLOR\",\"italic\":true,\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"$HOVER_MESSAGE\"}]}}}]"
|
"tellraw @a [\"\",{\"text\":\"[$PREFIX] \",\"color\":\"gray\",\"italic\":true},{\"text\":\"$MESSAGE\",\"color\":\"$COLOR\",\"italic\":true,\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"$HOVER_MESSAGE\"}]}}}]"
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,6 +3,7 @@
|
||||||
SUPPRESS_WARNINGS=false
|
SUPPRESS_WARNINGS=false
|
||||||
DEBUG=true
|
DEBUG=true
|
||||||
|
|
||||||
|
OPTIND=1
|
||||||
while getopts 'q:v:' FLAG; do
|
while getopts 'q:v:' FLAG; do
|
||||||
case $FLAG in
|
case $FLAG in
|
||||||
q) SUPPRESS_WARNINGS=$OPTARG ;;
|
q) SUPPRESS_WARNINGS=$OPTARG ;;
|
||||||
|
|
9
test.sh
9
test.sh
|
@ -6,13 +6,18 @@ ITERATIONS=1000
|
||||||
MINUTE_INTERVAL=30
|
MINUTE_INTERVAL=30
|
||||||
MINUTES_SINCE_START=0
|
MINUTES_SINCE_START=0
|
||||||
|
|
||||||
|
WORLD=test/world
|
||||||
|
BACKUP_DIR=test/backups
|
||||||
|
mkdir -p $WORLD
|
||||||
|
echo "hello there" > "$WORLD/content.txt"
|
||||||
|
|
||||||
if [[ $1 != "" ]]; then
|
if [[ $1 != "" ]]; then
|
||||||
ITERATIONS=$1
|
ITERATIONS=$1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
for (( c=1; c<=$ITERATIONS; c++ )); do
|
for (( c=1; c<=ITERATIONS; c++ )); do
|
||||||
TIMESTAMP=$(( START_TIMESTAMP + MINUTES_SINCE_START * 60 ))
|
TIMESTAMP=$(( START_TIMESTAMP + MINUTES_SINCE_START * 60 ))
|
||||||
FILE_NAME=$(date -d "@$TIMESTAMP" +%F_%H-%M-%S)
|
FILE_NAME=$(date -d "@$TIMESTAMP" +%F_%H-%M-%S)
|
||||||
./backup.sh -q -i /home/nicolas/privatesurvival/world -o /home/nicolas/backups -f $FILE_NAME
|
./backup.sh -q -s minecraft -i "$WORLD" -o "$BACKUP_DIR" -f "$FILE_NAME"
|
||||||
(( MINUTES_SINCE_START += MINUTE_INTERVAL ))
|
(( MINUTES_SINCE_START += MINUTE_INTERVAL ))
|
||||||
done
|
done
|
||||||
|
|
Loading…
Add table
Reference in a new issue