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
|
# https://github.com/nicolaschan/minecraft-backup
|
||||||
# MIT License
|
# 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.
|
# For most convenience, run automatically with cron.
|
||||||
|
|
||||||
# Default Configuration
|
# Default Configuration
|
||||||
|
@ -405,6 +405,7 @@ clean-up () {
|
||||||
delete-old-backups
|
delete-old-backups
|
||||||
exit 0
|
exit 0
|
||||||
else
|
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"
|
message-players-error "Backup was not saved!" "Please notify an administrator"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
@ -428,7 +429,18 @@ case $COMPRESSION_ALGORITHM in
|
||||||
*) tar -cf - -C "$SERVER_WORLD" . | $COMPRESSION_ALGORITHM -cv -"$COMPRESSION_LEVEL" - > "$ARCHIVE_PATH" 2>> /dev/null
|
*) tar -cf - -C "$SERVER_WORLD" . | $COMPRESSION_ALGORITHM -cv -"$COMPRESSION_LEVEL" - > "$ARCHIVE_PATH" 2>> /dev/null
|
||||||
;;
|
;;
|
||||||
esac
|
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
|
if [ "$ARCHIVE_EXIT_CODE" -ne 0 ]; then
|
||||||
log-fatal "Archive command exited with nonzero exit code $ARCHIVE_EXIT_CODE"
|
log-fatal "Archive command exited with nonzero exit code $ARCHIVE_EXIT_CODE"
|
||||||
fi
|
fi
|
||||||
|
|
21
test/test.sh
21
test/test.sh
|
@ -152,6 +152,27 @@ test-nonzero-exit-warning () {
|
||||||
EXIT_CODE="$?"
|
EXIT_CODE="$?"
|
||||||
assertNotEquals 0 "$EXIT_CODE"
|
assertNotEquals 0 "$EXIT_CODE"
|
||||||
assertContains "$OUTPUT" "Archive command exited with nonzero 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 () {
|
test-screen-interface () {
|
||||||
|
|
Loading…
Add table
Reference in a new issue