pinkidump.sh. Das Skript, das ab sofort regelmäßig nachts (per Cronjob) eine Kopie der Minecraft-Serverwelten zu Blue zum gelegentlichen Tectonicus-Rendern hochlädt.
Insbesondere bemerkenswert ist die Benutzung des Befehls send-keys, mit dem man auch an detachte tmux-Sitzungen mit interaktiven Programmen beliebige Eingaben senden kann (ggf. nachdem man innerhalb der Sitzung mit select-window auf ein anderes Fenster gewechselt ist).
#!/bin/bash
SERVERS_DIR="/var/lib/minecraft"
SERVERS="vanilla creative"
DUMPFILE_PREFIX="/var/tmp/dump-"
REMOTE_USER_HOST="dosamp@pinkiserver.ath.cx"
REMOTE_DIR="/home/dosamp/mcdumps"
# rotiert die letzten 2-3 Kopien durch, um die SSD nicht zuzumüllen
REMOTE_CLEANUP_SCRIPT="$REMOTE_DIR/clean.sh"
SERVER_FILES="server.properties"
LEVEL_FILES="data players region level.dat session.lock uid.dat"
SSH_OPTS="-2 -q -o BatchMode=yes -o PreferredAuthentications=publickey"
KEYFILE=`dirname $0`/pinkiserver.asc
DATESTAMP=`date +%F`
serverruns() {
test -f /var/run/minecraft/$1.pid -a -S /tmp/tmux-minecraft-$1
}
backupmode() {
tmux -S /tmp/tmux-minecraft-$1 send-keys save-all C-m save-off C-m
sleep 3
}
normalmode() {
tmux -S /tmp/tmux-minecraft-$1 send-keys save-on C-m
}
serverproperty() {
local var=`grep "^$2=" $SERVERS_DIR/$1/server.properties`
echo ${var##*=}
}
dumpfiles=
for server in $SERVERS ; do
dumpfile=$DUMPFILE_PREFIX$server-$DATESTAMP.tar.gz
dumpfiles="$dumpfiles $dumpfile"
serverruns $server && backupmode $server
levelname=`serverproperty $server level-name`
(for s in $SERVER_FILES; do echo $s ; done; \
for l in $LEVEL_FILES ; do echo $levelname/$l ; done) | \
xargs tar -czf $dumpfile -C $SERVERS_DIR/$server
serverruns $server && normalmode $server
done
ssh $SSH_OPTS -i $KEYFILE $REMOTE_USER_HOST $REMOTE_CLEANUP_SCRIPT
scp $SSH_OPTS -i $KEYFILE $dumpfiles $REMOTE_USER_HOST:$REMOTE_DIR \
&& rm $dumpfiles
Alles anzeigen