Deploy systemd path unit that watches for trigger file from Discord bot and executes world reset script to delete saves and restart server. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
58 lines
1.8 KiB
Django/Jinja
58 lines
1.8 KiB
Django/Jinja
#!/bin/bash
|
|
# Zomboid World Reset Script
|
|
# Triggered by systemd path unit when discord bot requests reset
|
|
|
|
set -e
|
|
|
|
LOGFILE="{{ podman_home }}/.local/share/volumes/zomboid/logs/world-reset.log"
|
|
TRIGGER_FILE="{{ podman_home }}/.local/share/volumes/gregtime/data/zomboid-reset.trigger"
|
|
SERVER_NAME="{{ zomboid_server_names[zomboid_server_mode] }}"
|
|
SAVES_PATH="{{ podman_home }}/.local/share/volumes/zomboid/data/Saves/Multiplayer/${SERVER_NAME}"
|
|
DB_PATH="{{ podman_home }}/.local/share/volumes/zomboid/data/db/${SERVER_NAME}.db"
|
|
|
|
log() {
|
|
echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" | tee -a "$LOGFILE"
|
|
}
|
|
|
|
# Ensure XDG_RUNTIME_DIR is set for systemctl --user
|
|
export XDG_RUNTIME_DIR="/run/user/$(id -u)"
|
|
|
|
log "World reset triggered"
|
|
|
|
# Read requester info from trigger file if available
|
|
# Note: Must use podman unshare because file is owned by container's UID (232071)
|
|
if podman unshare test -f "$TRIGGER_FILE"; then
|
|
REQUESTER=$(podman unshare cat "$TRIGGER_FILE")
|
|
log "Requested by: $REQUESTER"
|
|
podman unshare rm -f "$TRIGGER_FILE"
|
|
fi
|
|
|
|
# Stop server
|
|
log "Stopping zomboid service..."
|
|
systemctl --user stop zomboid.service || true
|
|
sleep 5
|
|
|
|
# Delete world (using podman unshare to work within user namespace)
|
|
log "Deleting world saves at: $SAVES_PATH"
|
|
if [[ -d "$SAVES_PATH" ]]; then
|
|
podman unshare rm -rf "$SAVES_PATH"
|
|
log "World saves deleted"
|
|
else
|
|
log "No world saves found at $SAVES_PATH"
|
|
fi
|
|
|
|
# Delete player database
|
|
log "Deleting player database at: $DB_PATH"
|
|
if [[ -f "$DB_PATH" ]]; then
|
|
podman unshare rm -f "$DB_PATH"
|
|
log "Player database deleted"
|
|
else
|
|
log "No database found at $DB_PATH"
|
|
fi
|
|
|
|
# Start server
|
|
log "Starting zomboid service..."
|
|
systemctl --user start zomboid.service
|
|
|
|
log "World reset complete - new world will generate on first connection"
|