67 lines
1.7 KiB
Bash
Executable File
67 lines
1.7 KiB
Bash
Executable File
#!/bin/bash
|
|
#
|
|
# Hytale Server Update Script
|
|
# Runs the updater, extracts new files, and restarts the server
|
|
#
|
|
|
|
set -e
|
|
|
|
HYTALE_DIR="/opt/hytale"
|
|
LOG_FILE="/var/log/hytale-update.log"
|
|
|
|
log() {
|
|
echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" | tee -a "$LOG_FILE"
|
|
}
|
|
|
|
cd "$HYTALE_DIR"
|
|
|
|
log "Starting update check..."
|
|
|
|
# Run the updater to check for and download updates
|
|
# The updater downloads files like "2026-01-17-abcdef.zip"
|
|
./hytale-downloader-linux-amd64 2>&1 | tee -a "$LOG_FILE"
|
|
|
|
# Find the newest zip file (pattern: YYYY.MM.DD-*.zip)
|
|
NEWEST_ZIP=$(ls -t [0-9][0-9][0-9][0-9].[0-9][0-9].[0-9][0-9]-*.zip 2>/dev/null | head -n1)
|
|
|
|
if [ -z "$NEWEST_ZIP" ]; then
|
|
log "No update zip found. Nothing to do."
|
|
exit 0
|
|
fi
|
|
|
|
# Check if this update was already applied
|
|
APPLIED_MARKER=".applied_updates"
|
|
if grep -Fxq "$NEWEST_ZIP" "$APPLIED_MARKER" 2>/dev/null; then
|
|
log "Update $NEWEST_ZIP was already applied. Skipping."
|
|
exit 0
|
|
fi
|
|
|
|
log "New update found: $NEWEST_ZIP"
|
|
|
|
# Stop the server
|
|
log "Stopping Hytale server..."
|
|
systemctl stop hytale.service || true
|
|
|
|
# Wait for server to fully stop
|
|
sleep 5
|
|
|
|
# Extract the update directly to /opt/hytale
|
|
log "Extracting $NEWEST_ZIP to $HYTALE_DIR..."
|
|
unzip -o "$NEWEST_ZIP" -d "$HYTALE_DIR"
|
|
|
|
# Fix file ownership (since this script runs as root)
|
|
chown -R mars3142:mars3142 "$HYTALE_DIR"
|
|
|
|
# Mark this update as applied
|
|
echo "$NEWEST_ZIP" >> "$APPLIED_MARKER"
|
|
|
|
# Start the server again
|
|
log "Starting Hytale server..."
|
|
systemctl start hytale.service
|
|
|
|
# Cleanup: keep only the 3 newest zip files
|
|
log "Cleaning up old zip files..."
|
|
ls -t [0-9][0-9][0-9][0-9].[0-9][0-9].[0-9][0-9]-*.zip 2>/dev/null | tail -n +4 | xargs -r rm -f
|
|
|
|
log "Update complete!"
|