From 06316e25bb3050408a09e6b5403bc1bb9d31d4e3 Mon Sep 17 00:00:00 2001 From: dodgex Date: Sat, 23 Aug 2025 11:22:54 +0200 Subject: [PATCH 1/5] backup: Let run_commands return a non-zero value when any command failed --- backup | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/backup b/backup index 278054b..fa09e9e 100755 --- a/backup +++ b/backup @@ -2,8 +2,15 @@ set -eo pipefail function run_commands { - COMMANDS=$1 - while IFS= read -r cmd; do echo "$cmd" && eval "$cmd" ; done < <(printf '%s\n' "$COMMANDS") + COMMANDS=$1 + RESULT=0 + while IFS= read -r cmd; do + echo "$cmd" && eval "$cmd" + if [ $? -ne 0 ]; then + RESULT=1 + fi + done < <(printf '%s\n' "$COMMANDS") + return $RESULT } function run_exit_commands { From b30227cedfddaa22ac0ecee364599ce9cb3e5749 Mon Sep 17 00:00:00 2001 From: dodgex Date: Sat, 23 Aug 2025 12:39:07 +0200 Subject: [PATCH 2/5] backup: Capture the result of PRE_COMMANDS. Executing PRE_COMMANDS_FAILURE if non-zero and abort if ABORT_ON_PRE_COMMANDS_FAILURE if set to "true". --- backup | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/backup b/backup index fa09e9e..03e4186 100755 --- a/backup +++ b/backup @@ -49,7 +49,19 @@ touch /run/lock/backup.lock trap run_exit_commands EXIT +set +e run_commands "${PRE_COMMANDS:-}" +pre_result=$? +set -e +if [ $pre_result -ne 0 ]; then + echo "Warning: At least one command of PRE_COMMANDS exited with a non-zero exit code." + run_commands "${PRE_COMMANDS_FAILURE:-}" + + if [ "${ABORT_ON_PRE_COMMANDS_FAILURE:-}" == "true" ]; then + rm -f /run/lock/backup.lock + exit 1 + fi +fi IFS=" " read -r -a RESTIC_BACKUP_SOURCES <<< "$(replace_spaces "${RESTIC_BACKUP_SOURCES:-/data}")" RESTIC_BACKUP_TAGS="${RESTIC_BACKUP_TAGS:-}" From 8354ee51d47d29a6aa7910ec4d45251963bc4b1a Mon Sep 17 00:00:00 2001 From: dodgex Date: Sat, 23 Aug 2025 12:39:58 +0200 Subject: [PATCH 3/5] README.md: Add notes about PRE_COMMANDS_FAILURE and ABORT_ON_PRE_COMMANDS_FAILURE --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 7524f75..efad771 100644 --- a/README.md +++ b/README.md @@ -196,6 +196,8 @@ PRE_COMMANDS: |- ``` The commands specified in `PRE_COMMANDS` are executed one by one. +In case of a failure, `PRE_COMMANDS_FAILURE` will be executed, if set. +And if `ABORT_ON_PRE_COMMANDS_FAILURE` is set to `"true"`, the backup will be aborted. ## Execute commands after backup From 51405b19ef78f67baeaed89cfcd3a1a7c2819b3d Mon Sep 17 00:00:00 2001 From: dodgex Date: Sat, 23 Aug 2025 13:06:28 +0200 Subject: [PATCH 4/5] prune/check: Add PRE_COMMANDS_FAILURE support --- check | 22 ++++++++++++++++++++-- prune | 22 ++++++++++++++++++++-- 2 files changed, 40 insertions(+), 4 deletions(-) diff --git a/check b/check index 563fdcf..6d7467e 100755 --- a/check +++ b/check @@ -2,8 +2,15 @@ set -euo pipefail function run_commands { - COMMANDS=$1 - while IFS= read -r cmd; do echo $cmd && eval $cmd ; done < <(printf '%s\n' "$COMMANDS") + COMMANDS=$1 + RESULT=0 + while IFS= read -r cmd; do + echo "$cmd" && eval "$cmd" + if [ $? -ne 0 ]; then + RESULT=1 + fi + done < <(printf '%s\n' "$COMMANDS") + return $RESULT } function run_exit_commands { @@ -13,7 +20,18 @@ function run_exit_commands { } main() { + set +e run_commands "${PRE_COMMANDS:-}" + pre_result=$? + set -e + if [ $pre_result -ne 0 ]; then + echo "Warning: At least one command of PRE_COMMANDS exited with a non-zero exit code." + run_commands "${PRE_COMMANDS_FAILURE:-}" + + if [ "${ABORT_ON_PRE_COMMANDS_FAILURE:-}" == "true" ]; then + exit 1 + fi + fi start=$(date +%s) echo Starting check at "$(date +"%Y-%m-%d %H:%M:%S")" diff --git a/prune b/prune index 11c7053..8ae6fd5 100755 --- a/prune +++ b/prune @@ -2,8 +2,15 @@ set -euo pipefail function run_commands { - COMMANDS=$1 - while IFS= read -r cmd; do echo $cmd && eval $cmd ; done < <(printf '%s\n' "$COMMANDS") + COMMANDS=$1 + RESULT=0 + while IFS= read -r cmd; do + echo "$cmd" && eval "$cmd" + if [ $? -ne 0 ]; then + RESULT=1 + fi + done < <(printf '%s\n' "$COMMANDS") + return $RESULT } function run_exit_commands { @@ -13,7 +20,18 @@ function run_exit_commands { } main() { + set +e run_commands "${PRE_COMMANDS:-}" + pre_result=$? + set -e + if [ $pre_result -ne 0 ]; then + echo "Warning: At least one command of PRE_COMMANDS exited with a non-zero exit code." + run_commands "${PRE_COMMANDS_FAILURE:-}" + + if [ "${ABORT_ON_PRE_COMMANDS_FAILURE:-}" == "true" ]; then + exit 1 + fi + fi start=$(date +%s) From 7229aba871ff7ce5e5baa95a87c91250354a2977 Mon Sep 17 00:00:00 2001 From: dodgex Date: Mon, 8 Dec 2025 15:59:35 +0100 Subject: [PATCH 5/5] README.md: Update wording. --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index efad771..2b01351 100644 --- a/README.md +++ b/README.md @@ -197,7 +197,7 @@ PRE_COMMANDS: |- The commands specified in `PRE_COMMANDS` are executed one by one. In case of a failure, `PRE_COMMANDS_FAILURE` will be executed, if set. -And if `ABORT_ON_PRE_COMMANDS_FAILURE` is set to `"true"`, the backup will be aborted. +The backup will be aborted if `ABORT_ON_PRE_COMMANDS_FAILURE` is set to `"true"`. ## Execute commands after backup