抱歉,您的浏览器无法访问本站

本页面需要浏览器支持(启用)JavaScript


了解详情 >

Exodus

More than ideas.

Dig, Fight and Build!

超级简单,有手就行

不支持Docker

增加外网转发和反代支持

介绍插件安装使用和常用插件

简介

在Terraria本地的客户端中,本身就包含了简单的Windows Server,但在Windows环境下调试、维护服务器无疑是极为折磨的。因此我们仍然选择在Linux服务器下架设Terraria服务器并实现持久化、自动定时任务等功能。

由于主要是和朋友之间联机,因此本教程的网络环境为局域网下,没有做相应的安全解决措施。后续可能会增加外网转发的教程。

拉取服务端

在Terraria的官方Wiki上提供了相关服务器的下载链接。需要注意,本地游戏端与服务器版本必须一致

选择合适的版本,并使用wget下载相应的zip文件,下载后使用unzip解压到相应的文件夹。

在解压的文件夹中找到Linux目录,并给其中的执行文件添加权限

sudo chmod +x TerrariaServer.bin.x86*

然后启动执行文件./TerrariaServer.bin.x86_64

如果有相应的地图文件,将.wld文件放置在~/.local/share/Terraria/Worlds/下即可启用。

Terraria官方Wiki中给出了服务端的配置文件规范。有兴趣的童鞋可以自行查看。下一节中我们会用到配置文件。

脚本配置和持久化

建议使用一个脚本来管理服务器。一个示例脚本如下。

#!/bin/bash

# 运行服务端的Linux用户名
USERNAME='terraria'
# 后台挂起进程名
SCNAME='terraria'
# Terraria版本号
TERA_VER='1422'
# 可执行文件目录
BIN_PATH="/home/terraria/Terraria/$TERA_VER/Linux/"
# 可执行文件名
SERVICE='TerrariaServer.bin.x86_64'
# 配置文件路径
CONFIG='/home/terraria/.local/share/Terraria/serverconfig.txt'
 
ME=`whoami`
 
if [ $ME != $USERNAME ] ; then
   echo "[ERROR] 请以 [$USERNAME] 用户身份运行!"
   exit
fi
 
start() {
   if pgrep -u $USERNAME -f $SERVICE > /dev/null ; then
       echo "[ERROR] $SERVICE 已经在运行中!"
       exit
   fi
 
   echo "[MSG] 正在启动 $SERVICE..."
   screen -AmdS $SCNAME $BIN_PATH$SERVICE -config $CONFIG
   exit
}
 
stop() {
   if pgrep -u $USERNAME -f $SERVICE > /dev/null ; then
       echo "[MSG] 正在停止 $SERVICE..."
   else
       echo "[ERROR] $SERVICE 不在运行中!"
       exit
   fi
 
   screen -p 0 -S $SCNAME -X eval 'stuff "say SERVER SHUTTING DOWN IN 10 SECONDS. "\015'
   sleep 10
   screen -p 0 -S $SCNAME -X eval 'stuff "exit"\015'
   exit
}
 
save() {
   echo '[MSG] 正在保存世界中...'
   screen -p 0 -S $SCNAME -X eval 'stuff "say World saveing..."\015'
   screen -p 0 -S $SCNAME -X eval 'stuff "save"\015'
   exit
}
 
status() {
   if pgrep -u $USERNAME -f $SERVICE > /dev/null ; then
                echo "[MSG] $SERVICE 正在运行中。"
                exit
   else
       echo "[WARNING] $SERVICE 不在运行中。"
       exit
        fi
}
 
case "$1" in
   start)
       start
       ;;
   stop)
       stop
       ;;
   save)
       save
       ;;
   status)
       status
       ;;
   *)
       echo  $"Usage: $0 {start|stop|status|save}"
esac

在以上脚本中路径必须全部使用绝对路径!

最后,我们利用此脚本在crontab中实现自动保存世界,一个简单的持久化世界就完成了。(其他的下次再说吧)

$ > vim /etc/crontab
...
* */1 * * * lovecatc /home/lovecatc/terra_exec.sh save

评论