My server wrapper and backup scripts. For this thread, I think the interesting bit is the backup script, since it's parametrized by game name.
Both scripts assume the game directory is ~/dominions3
The server wrapper passes all parameters directly to dom3. It only deals with the last parameter, which is assumed to be the name of the game. The wrapper is mainly for having a bunch of default parameters that I want to have all the time.
The backup script writes the backups to ~/dominions/backups. It reads the scores.html file to determine current turn, so the game needs to be run with --scoredump on.
dom3serv:
Code:
#! /usr/bin/env python
from os import environ, execvp, mkdir
from os.path import exists, join
from sys import argv
# Common options
common = ["--scoredump",
"--tcpserver",
"--quickhost",
"--textonly"
]
# Newgame standard options
newgame = ["--masterpass", "*****",
"--renaming",
"--noscoregraphs"]
# Start game
HOME = environ["HOME"]
GAME = argv[-1]
EXECS = ["--preexec", "dom3backup %s" % (GAME,)
# ,"--postexec", "command %s" % (GAME,)
]
common = common + EXECS
if exists(join(HOME,"dominions3","savedgames",GAME,"ftherlnd")):
print "Resuming game %s" % (GAME,)
execvp("dom3", ["dom3"] + common + argv[1:])
else:
print "Starting new game %s" % (GAME,)
if not exists(join(HOME,"dominions3","savedgames",GAME)):
mkdir(join(HOME,"dominions3","savedgames",GAME))
execvp("dom3", ["dom3"] + common + newgame + argv[1:])
dom3backup:
Code:
#! /bin/bash
game=$1
savedir="$HOME/dominions3/savedgames"
gamedir="$savedir/$game"
backupdir="$HOME/dominions3/backups/$game"
fatherland="$gamedir/ftherlnd"
if [ ! -d $gamedir ]; then
echo "Can't backup non-existent game!"
exit
fi
if [ -f $fatherland ]; then
if [ -f $gamedir/scores.html ]; then
turn=`grep -Eo -m 1 "Dominions 3 Scores, $game turn ([[:digit:]]+)" $gamedir/scores.html | grep -Eo "[[:digit:]]+$"`
else
turn=1
fi
backupfile="$backupdir/turn_$turn.tar.bz2"
else
backupfile="$backupdir/pregame.tar.bz2"
fi
# Make sure backup dir exists
if [ ! -d $backupdir ]; then
mkdir -p $backupdir
fi
# Create backupfile for this turn
echo "Creating backup file $backupfile"
tar cjf $backupfile -C $savedir $game > /dev/null
Edit:
Regarding that unattendedness stuff, I run my server processes each in their own window under GNU screen, so they'll print their log to a terminal, but I don't have to have a local/remote login open all the time. But that's more a part of the fact that my setup currently requires me to start each game manually.