Better handle tar error
This commit is contained in:
parent
ccaf734df2
commit
12a1b7b84d
2 changed files with 35 additions and 2 deletions
16
backup.sh
16
backup.sh
|
@ -4,7 +4,7 @@
|
|||
# https://github.com/nicolaschan/minecraft-backup
|
||||
# MIT License
|
||||
#
|
||||
# For Minecraft servers running in a GNU screen.
|
||||
# For Minecraft servers running in a GNU screen, tmux, or RCON.
|
||||
# For most convenience, run automatically with cron.
|
||||
|
||||
# Default Configuration
|
||||
|
@ -405,6 +405,7 @@ clean-up () {
|
|||
delete-old-backups
|
||||
exit 0
|
||||
else
|
||||
rm "$ARCHIVE_PATH" # Delete bad archive so we can't fill up with bad archives
|
||||
message-players-error "Backup was not saved!" "Please notify an administrator"
|
||||
exit 1
|
||||
fi
|
||||
|
@ -428,7 +429,18 @@ case $COMPRESSION_ALGORITHM in
|
|||
*) tar -cf - -C "$SERVER_WORLD" . | $COMPRESSION_ALGORITHM -cv -"$COMPRESSION_LEVEL" - > "$ARCHIVE_PATH" 2>> /dev/null
|
||||
;;
|
||||
esac
|
||||
ARCHIVE_EXIT_CODE="$(exit-code "${PIPESTATUS[0]}" "${PIPESTATUS[1]}")"
|
||||
EXIT_CODES=("${PIPESTATUS[@]}")
|
||||
|
||||
# tar exit codes: http://www.gnu.org/software/tar/manual/html_section/Synopsis.html
|
||||
# 0 = successful, 1 = some files differ, 2 = fatal
|
||||
if [ "${EXIT_CODES[0]}" == "1" ]; then
|
||||
log-warning "Some files may differ in the backup archive (file changed as read)"
|
||||
TAR_EXIT_CODE="0"
|
||||
else
|
||||
TAR_EXIT_CODE="${EXIT_CODES[0]}"
|
||||
fi
|
||||
|
||||
ARCHIVE_EXIT_CODE="$(exit-code "$TAR_EXIT_CODE" "${EXIT_CODES[1]}")"
|
||||
if [ "$ARCHIVE_EXIT_CODE" -ne 0 ]; then
|
||||
log-fatal "Archive command exited with nonzero exit code $ARCHIVE_EXIT_CODE"
|
||||
fi
|
||||
|
|
21
test/test.sh
21
test/test.sh
|
@ -152,6 +152,27 @@ test-nonzero-exit-warning () {
|
|||
EXIT_CODE="$?"
|
||||
assertNotEquals 0 "$EXIT_CODE"
|
||||
assertContains "$OUTPUT" "Archive command exited with nonzero exit code"
|
||||
assertFalse "[ -f "$TEST_TMP/backups/$TIMESTAMP.tar.gz" ]"
|
||||
}
|
||||
|
||||
test-file-changed-as-read-warning () {
|
||||
TIMESTAMP="$(date +%F_%H-%M-%S --date="2021-01-01")"
|
||||
dd if=/dev/urandom of="$TEST_TMP/server/world/random" &
|
||||
DD_PID="$!"
|
||||
OUTPUT="$(./backup.sh -i "$TEST_TMP/server/world" -o "$TEST_TMP/backups" -s "$SCREEN_TMP" -f "$TIMESTAMP" 2>&1)"
|
||||
EXIT_CODE="$?"
|
||||
kill "$DD_PID"
|
||||
assertEquals 0 "$EXIT_CODE"
|
||||
assertContains "$OUTPUT" "Some files may differ in the backup archive"
|
||||
|
||||
# Check that the backup actually resulted in a valid tar
|
||||
assertTrue "[ -f "$TEST_TMP/backups/$TIMESTAMP.tar.gz" ]"
|
||||
|
||||
mkdir -p "$TEST_TMP/restored"
|
||||
tar --extract --file "$TEST_TMP/backups/$TIMESTAMP.tar.gz" --directory "$TEST_TMP/restored"
|
||||
assert-equals-directory "$WORLD_DIR/file1.txt" "$TEST_TMP/restored/file1.txt"
|
||||
assert-equals-directory "$WORLD_DIR/file2.txt" "$TEST_TMP/restored/file2.txt"
|
||||
assert-equals-directory "$WORLD_DIR/file3.txt" "$TEST_TMP/restored/file3.txt"
|
||||
}
|
||||
|
||||
test-screen-interface () {
|
||||
|
|
Loading…
Add table
Reference in a new issue