restic scripts: absolute /usr/local/bin/restic — cron PATH lacks it

First cron run (2026-08-28 05:00) failed with 'restic: command not
found'; interactive shells had /usr/local/bin, cron does not.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
Julien Lutran
2026-08-28 12:53:04 +02:00
co-authored by Claude Fable 5
parent c5c958f511
commit 75760ba303
3 changed files with 11 additions and 8 deletions
+3 -2
View File
@@ -32,6 +32,7 @@ DB_EXCLUDE_FILE=/root/scripts/plakar-db-exclude # same opt-out list, same form
DUMP_DIR=/backup/dumps DUMP_DIR=/backup/dumps
LOCKFILE=/run/lock/restic-backup.lock LOCKFILE=/run/lock/restic-backup.lock
ENVFILE=/root/.restic-env ENVFILE=/root/.restic-env
RESTIC=/usr/local/bin/restic # cron PATH lacks /usr/local/bin
STAGE=all STAGE=all
usage() { usage() {
@@ -144,14 +145,14 @@ fi # stage dumps
if [ "$STAGE" = all ] || [ "$STAGE" = backup ]; then if [ "$STAGE" = all ] || [ "$STAGE" = backup ]; then
log "restic backup -> $REPO" log "restic backup -> $REPO"
restic -r "$REPO" backup \ $RESTIC -r "$REPO" backup \
--pack-size 64 --read-concurrency 8 -o s3.connections=8 \ --pack-size 64 --read-concurrency 8 -o s3.connections=8 \
--exclude-file "$EXCLUDE_FILE" \ --exclude-file "$EXCLUDE_FILE" \
--files-from-verbatim "$PATHS_FILE" "$DUMP_DIR" \ --files-from-verbatim "$PATHS_FILE" "$DUMP_DIR" \
|| { echo "restic backup failed" >&2; rc=1; } || { echo "restic backup failed" >&2; rc=1; }
log "forget: keep 14d/8w/6m" log "forget: keep 14d/8w/6m"
restic -r "$REPO" forget --group-by host \ $RESTIC -r "$REPO" forget --group-by host \
--keep-daily 14 --keep-weekly 8 --keep-monthly 6 || rc=1 --keep-daily 14 --keep-weekly 8 --keep-monthly 6 || rc=1
fi # stage backup fi # stage backup
+3 -2
View File
@@ -31,6 +31,7 @@ ONLY_INSTANCES=""
MNT_ROOT=/run/restic-incus MNT_ROOT=/run/restic-incus
LOCKFILE=/run/lock/restic-incus-backup.lock LOCKFILE=/run/lock/restic-incus-backup.lock
ENVFILE=/root/.restic-env ENVFILE=/root/.restic-env
RESTIC=/usr/local/bin/restic # cron PATH lacks /usr/local/bin
MOUNT_TIMEOUT=30 MOUNT_TIMEOUT=30
usage() { usage() {
@@ -105,7 +106,7 @@ for inst in $(incus list --project "$PROJECT" -c n -f csv); do
fi fi
log "backup $inst" log "backup $inst"
restic -r "$REPO" backup \ $RESTIC -r "$REPO" backup \
--pack-size 64 --read-concurrency 8 -o s3.connections=8 \ --pack-size 64 --read-concurrency 8 -o s3.connections=8 \
--tag "$inst" "$mnt" "$MNT_ROOT/$inst.yaml" \ --tag "$inst" "$mnt" "$MNT_ROOT/$inst.yaml" \
|| { echo "backup of $inst failed" >&2; rc=1; } || { echo "backup of $inst failed" >&2; rc=1; }
@@ -114,7 +115,7 @@ for inst in $(incus list --project "$PROJECT" -c n -f csv); do
done done
log "forget: keep 14d/8w/6m" log "forget: keep 14d/8w/6m"
restic -r "$REPO" forget --keep-daily 14 --keep-weekly 8 --keep-monthly 6 || rc=1 $RESTIC -r "$REPO" forget --keep-daily 14 --keep-weekly 8 --keep-monthly 6 || rc=1
log "done (rc=$rc)" log "done (rc=$rc)"
exit $rc exit $rc
+5 -4
View File
@@ -17,6 +17,7 @@ set -u
REPOS="s3:s3.sbg.io.cloud.ovh.net/restic-data,s3:s3.sbg.io.cloud.ovh.net/restic-incus" REPOS="s3:s3.sbg.io.cloud.ovh.net/restic-data,s3:s3.sbg.io.cloud.ovh.net/restic-incus"
LOCKFILE=/run/lock/restic-maintenance.lock LOCKFILE=/run/lock/restic-maintenance.lock
ENVFILE=/root/.restic-env ENVFILE=/root/.restic-env
RESTIC=/usr/local/bin/restic # cron PATH lacks /usr/local/bin
while getopts r: flag; do while getopts r: flag; do
case "${flag}" in case "${flag}" in
@@ -42,11 +43,11 @@ WEEK=$(( ($(date +%s) / 604800) % 52 + 1 ))
rc=0 rc=0
for repo in $(printf '%s' "$REPOS" | tr ',' ' '); do for repo in $(printf '%s' "$REPOS" | tr ',' ' '); do
log "maintenance: $repo" log "maintenance: $repo"
restic -r "$repo" unlock || rc=1 $RESTIC -r "$repo" unlock || rc=1
restic -r "$repo" prune --max-unused 10% --max-repack-size 4G --pack-size 64 || rc=1 $RESTIC -r "$repo" prune --max-unused 10% --max-repack-size 4G --pack-size 64 || rc=1
restic -r "$repo" check || rc=1 $RESTIC -r "$repo" check || rc=1
log "check --read-data-subset=$WEEK/52" log "check --read-data-subset=$WEEK/52"
restic -r "$repo" check --read-data-subset="$WEEK/52" || rc=1 $RESTIC -r "$repo" check --read-data-subset="$WEEK/52" || rc=1
done done
log "done (rc=$rc)" log "done (rc=$rc)"