#!/bin/bash MCUSER='minecraft' MCGROUP='minecraft' MCHOME="/home/$MCUSER" MCNAME=$1 MCPATH="$MCHOME/$MCNAME" MCLOG="$MCPATH/logs/latest.log" BACKUPPATH="backup" WORLD="world" ME=`whoami` as_user(){ if [ "$ME" = "$MCUSER" ] ; then bash -c "$1" else su - $MCUSER -c "$1" fi } mc_screen(){ mc_check echo "$(mc_pid).mc-$MCNAME" } mc_isup(){ if pgrep -u $MCUSER -f $MCNAME > /dev/null ; then return 0 else return 1 fi } mc_check(){ if ! mc_isup ; then echo "$MCNAME is not running." exit fi } mc_stuff(){ as_user "screen -p 0 -S $(mc_screen) -X eval 'stuff \"$1\"\015'" } mc_saveon(){ mc_check echo "$MCNAME is running... re-enabling saves" mc_stuff "save-on" } mc_saveoff(){ mc_check echo "$MCNAME is running... suspending saves" mc_stuff "save-off" mc_stuff "save-all" } mc_list(){ mc_check pre_log_len=`wc -l $MCLOG | awk '{print $1}'` mc_stuff "list" sleep .1 tail -n $((`wc -l $MCLOG | awk '{print $1}'`-$pre_log_len)) $MCLOG } mc_pid(){ mc_check echo `pgrep -u $MCUSER -f $MCNAME` } mc_status(){ mc_check echo "$MCNAME is running." } mc_backup(){ mc_isup && mc_saveoff mc_isup && mc_stuff "say SERVER BACKUP STARTING. Server going readonly..." NOW=`date "+%Y-%m-%d_%Hh%M"` BACKUP_FILE="$BACKUPPATH/${MCNAME}_${NOW}.tar" as_user "tar -C \"$MCPATH\" -cf \"$MCPATH/$BACKUP_FILE\" $WORLD" mc_isup && mc_saveon mc_isup && mc_stuff "say SERVER BACKUP ENDED. Server going read-write..." echo "Compressing backup..." as_user "gzip -f $MCPATH/$BACKUP_FILE" echo "Done." } case $2 in pid) mc_pid $1 ;; status) mc_status ;; screen) mc_screen ;; list) mc_list ;; backup) mc_backup ;; *) echo "Usage: $0 instance {pid, status, list, backup}" exit 1 ;; esac exit 0