Skip to content

Instantly share code, notes, and snippets.

@DmitryRendov
Created August 12, 2018 18:05
Show Gist options
  • Save DmitryRendov/8a9290a3cfc7b8014015567d81c99ad1 to your computer and use it in GitHub Desktop.
Save DmitryRendov/8a9290a3cfc7b8014015567d81c99ad1 to your computer and use it in GitHub Desktop.
Terraria Linux x86_64 server (screen)
#!/bin/bash -e
### BEGIN INIT INFO
# Provides: Terraria
# Required-Start: $local_fs $remote_fs screen-cleanup
# Required-Stop: $local_fs $remote_fs
# Should-Start: $network
# Should-Stop: $network
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Terraria server
# Description: Starts the terraria server
### END INIT INFO
# Settings
SERVICE='TerrariaServer.bin.x86_64'
USERNAME='terraria'
SCREENNAME='terraria'
HISTORY=1000
TRPATH='/home/terraria/GOGGames/Terraria/game'
TRWORLD='/home/terraria/.local/share/Terraria'
BACKUPPATH='/home/terraria/backups/terraria'
SERVERCONFIG='/home/terraria/GOGGames/Terraria/serverconfig-survival.txt'
D2BACKUP[0]='Worlds'
ME=`whoami`
as_user() {
if [ $ME == $USERNAME ] ; then
bash -c "$1"
else
su - $USERNAME -c "$1"
fi
}
tr_start() {
if pgrep -u $USERNAME -f $SERVICE > /dev/null
then
echo "$SERVICE is already running!"
else
echo "Starting $SERVICE..."
cd $SBPATH
as_user "cd $TRPATH && screen -h $HISTORY -dmS $SCREENNAME ./$SERVICE -config $SERVERCONFIG"
sleep 7
if pgrep -u $USERNAME -f $SERVICE > /dev/null
then
echo "$SERVICE is now running."
else
echo "Error! Could not start $SERVICE!"
fi
fi
}
tr_stop() {
if pgrep -u $USERNAME -f $SERVICE > /dev/null
then
echo "Stopping $SERVICE"
#pkill -SIGINT -u $USERNAME -f $SERVICE > /dev/null
as_user "screen -p 0 -S $SCREENNAME -X eval 'stuff \"exit\"\015'"
sleep 7
else
echo "$SERVICE was not running."
fi
if pgrep -u $USERNAME -f $SERVICE > /dev/null
then
echo "Error! $SERVICE could not be stopped."
else
echo "$SERVICE is stopped."
fi
}
tr_backup() {
umask 077
NOW=`date "+%Y-%m-%d_%Hh%M"`
BACKUP_FILE="$BACKUPPATH/${NOW}.tar"
echo ""
echo -n "Removing old backcopies..."
echo ""
find $BACKUPPATH/*.gz -mtime +14 -exec rm {} \;
echo ""
echo "Backing up Terraria World..."
echo ""
for object in ${D2BACKUP[*]}
do
echo ""
echo -n "Backuping ${object}"
as_user "tar -C \"$TRWORLD\" -rf \"$BACKUP_FILE\" $object"
done
echo ""
echo "Compressing backup..."
as_user "gzip -f \"$BACKUP_FILE\""
chmod 0600 "${BACKUP_FILE}.gz"
echo "Done."
}
# The main events processor
case "$1" in
start)
tr_start
;;
stop)
tr_stop
;;
restart)
tr_stop
tr_start
;;
backup)
tr_backup
;;
status)
if pgrep -u $USERNAME -f $SERVICE > /dev/null
then
echo "$SERVICE is running."
else
echo "$SERVICE is not running."
fi
;;
*)
echo "Usage: $0 {start|stop|backup|status|restart}"
exit 1
;;
esac
exit 0
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment