The nightly rollup and backup say by their exit status whether they managed, and the deploy leaves the cron file off a host the hall schedules
On the shared host the hall's hall-nightly.sh (game-kit, gamehall/ops) runs both scripts for every game and checks in with Sentry Crons once for all, so this game's own check-in files are absent there and its exit status is the word. A box of its own keeps its cron and check-ins as before. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Fable 5.1
parent
50178f0105
commit
d32488b803
+5
-1
@@ -43,7 +43,11 @@ ssh "root@$HOST" '
|
|||||||
install -m 755 /opt/hnefatafl/app/deploy/hnefatafl-rollup.sh /usr/local/bin/hnefatafl-rollup.sh
|
install -m 755 /opt/hnefatafl/app/deploy/hnefatafl-rollup.sh /usr/local/bin/hnefatafl-rollup.sh
|
||||||
install -m 755 /opt/hnefatafl/app/deploy/hnefatafl-backup.sh /usr/local/bin/hnefatafl-backup.sh
|
install -m 755 /opt/hnefatafl/app/deploy/hnefatafl-backup.sh /usr/local/bin/hnefatafl-backup.sh
|
||||||
install -m 644 -D /opt/hnefatafl/app/deploy/traffic.py /usr/local/lib/hnefatafl/traffic.py
|
install -m 644 -D /opt/hnefatafl/app/deploy/traffic.py /usr/local/lib/hnefatafl/traffic.py
|
||||||
install -m 644 /opt/hnefatafl/app/deploy/hnefatafl.cron /etc/cron.d/hnefatafl
|
# On a host the hall shares, its hall-nightly.sh runs the rollup and backup
|
||||||
|
# of every game and checks in with Sentry once for all; a game on a box of
|
||||||
|
# its own schedules its own.
|
||||||
|
if [ -f /etc/cron.d/gamehall ]; then rm -f /etc/cron.d/hnefatafl
|
||||||
|
else install -m 644 /opt/hnefatafl/app/deploy/hnefatafl.cron /etc/cron.d/hnefatafl; fi
|
||||||
mkdir -p /var/log/hnefatafl
|
mkdir -p /var/log/hnefatafl
|
||||||
systemctl daemon-reload
|
systemctl daemon-reload
|
||||||
systemctl enable --now hnefatafl
|
systemctl enable --now hnefatafl
|
||||||
|
|||||||
@@ -5,6 +5,8 @@
|
|||||||
# Ledgers are append-only JSONL; the game server never needs stopping.
|
# Ledgers are append-only JSONL; the game server never needs stopping.
|
||||||
# Sentry Crons check-in: /root/.hnefatafl-sentry-cron holds the check-in
|
# Sentry Crons check-in: /root/.hnefatafl-sentry-cron holds the check-in
|
||||||
# URL (absent file = no check-ins). SCHEDULE must match /etc/cron.d/hnefatafl.
|
# URL (absent file = no check-ins). SCHEDULE must match /etc/cron.d/hnefatafl.
|
||||||
|
# On a host the hall shares, hall-nightly.sh runs this and checks in once
|
||||||
|
# for every game, so the file is absent and the exit status is the word.
|
||||||
set -u
|
set -u
|
||||||
SCHEDULE="23 7 * * *"
|
SCHEDULE="23 7 * * *"
|
||||||
BUCKET="kestrel-wizwar-backups"
|
BUCKET="kestrel-wizwar-backups"
|
||||||
@@ -27,9 +29,10 @@ checkin() {
|
|||||||
|
|
||||||
if [ ! -s /root/.config/rclone/rclone.conf ]; then
|
if [ ! -s /root/.config/rclone/rclone.conf ]; then
|
||||||
echo "$(date -Is) skipped: rclone is not configured" >> "$LOG"
|
echo "$(date -Is) skipped: rclone is not configured" >> "$LOG"
|
||||||
exit 0
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
status=0
|
||||||
{
|
{
|
||||||
echo "=== $(date -Is) backup start"
|
echo "=== $(date -Is) backup start"
|
||||||
if rclone sync "$SRC" "spaces:$BUCKET/$PREFIX/current" --exclude 'rollup.jsonl' 2>&1 &&
|
if rclone sync "$SRC" "spaces:$BUCKET/$PREFIX/current" --exclude 'rollup.jsonl' 2>&1 &&
|
||||||
@@ -37,6 +40,7 @@ fi
|
|||||||
checkin ok
|
checkin ok
|
||||||
else
|
else
|
||||||
checkin error
|
checkin error
|
||||||
|
status=1
|
||||||
fi
|
fi
|
||||||
CUTOFF=$(date -d "90 days ago" +%Y-%m-%d)
|
CUTOFF=$(date -d "90 days ago" +%Y-%m-%d)
|
||||||
rclone lsf "spaces:$BUCKET/$PREFIX/snapshots/" --dirs-only 2>/dev/null | \
|
rclone lsf "spaces:$BUCKET/$PREFIX/snapshots/" --dirs-only 2>/dev/null | \
|
||||||
@@ -49,3 +53,4 @@ fi
|
|||||||
done
|
done
|
||||||
echo "=== $(date -Is) backup done"
|
echo "=== $(date -Is) backup done"
|
||||||
} >> "$LOG" 2>&1
|
} >> "$LOG" 2>&1
|
||||||
|
exit $status
|
||||||
|
|||||||
@@ -8,7 +8,9 @@
|
|||||||
# Cron: /etc/cron.d/hnefatafl, installed by deploy.sh; SCHEDULE below
|
# Cron: /etc/cron.d/hnefatafl, installed by deploy.sh; SCHEDULE below
|
||||||
# must match it, because the Sentry monitor is told the same shape.
|
# must match it, because the Sentry monitor is told the same shape.
|
||||||
# Sentry Crons check-in: /root/.hnefatafl-sentry-cron-rollup holds the
|
# Sentry Crons check-in: /root/.hnefatafl-sentry-cron-rollup holds the
|
||||||
# check-in URL (absent = no check-ins).
|
# check-in URL (absent = no check-ins). On a host the hall shares,
|
||||||
|
# hall-nightly.sh runs this and checks in once for every game, so the
|
||||||
|
# file is absent and the exit status is the word.
|
||||||
set -u
|
set -u
|
||||||
OUT="/var/lib/hnefatafl/rollup.jsonl"
|
OUT="/var/lib/hnefatafl/rollup.jsonl"
|
||||||
LOG="/var/log/hnefatafl/rollup.log"
|
LOG="/var/log/hnefatafl/rollup.log"
|
||||||
@@ -78,4 +80,4 @@ with open(out + ".tmp", "w") as fh:
|
|||||||
os.replace(out + ".tmp", out)
|
os.replace(out + ".tmp", out)
|
||||||
print("%s rolled: %d people, %d requests, %d rooms" % (day, len(t["addresses"]), t["human"], created))
|
print("%s rolled: %d people, %d requests, %d rooms" % (day, len(t["addresses"]), t["human"], created))
|
||||||
PY
|
PY
|
||||||
then checkin ok; else checkin error; fi
|
then checkin ok; else checkin error; exit 1; fi
|
||||||
|
|||||||
Reference in New Issue
Block a user