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:
co-authored by
Claude Fable 5
parent
c5c958f511
commit
75760ba303
+3
-2
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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)"
|
||||||
|
|||||||
Reference in New Issue
Block a user