自动服务器

自动服务器

一个用于Velocity代理的Minecraft插件,可在玩家连接时自动启动后端服务器,并在无玩家在线时停止它们。

AutoServer

概述

AutoServer 是一款为 Velocity 代理 设计的 Minecraft 插件。该插件会在玩家尝试连接离线后端服务器时自动启动它们。非常适合那些希望通过让空闲服务器保持离线状态直到需要时再启动来节省资源的服务器网络。

特性

  • 当玩家尝试连接时自动启动后端服务器。
  • 当没有玩家在线时自动停止本地服务器。
  • 使用命令手动启动和停止后端服务器。
  • 支持配置热重载。
  • 消息可自定义。

快速开始

本节将介绍如何安装和配置 AutoServer 的最小化设置。

  1. 下载 AutoServer 前往 版本 页面获取 AutoServer 的最新版本。下载 AutoServer 后,将 JAR 文件放入 Velocity 代理的 plugins 目录。

  2. 首次启动 将 AutoServer 放入 plugins 目录后,我们需要重启 Velocity 以加载插件。首次启动时,AutoServer 会在 plugins 目录中生成配置文件 autoserver/config.toml。

  3. 配置你的服务器 首先查看你的 velocity.toml 文件,找到 [servers] 部分。服务器的命名必须与配置 AutoServer 时完全一致。

    在文本编辑器中打开 autoserver/config.toml,搜索 [servers] 部分。该部分指定了 AutoServer 将管理的服务器。为你想让 AutoServer 管理的每个服务器创建一个表。例如,如果你有一个名为 lobby 的服务器,你需要创建一个名为 [servers.lobby] 的表。

    配置服务器有两条路径可选:远程服务器或本地服务器。如果你需要配置远程服务器,请查看 远程后端 部分了解详情。在本节中,我们将处理一个有脚本的本地服务器。这个示例本地服务器名为 lobby,以下是使用脚本启动服务器的最小化设置:

    [servers]
    [servers.lobby]
    # 服务器运行目录的路径。
    workingDirectory = "/home/user/minecraft/servers/lobby"
    # 启动 "lobby" 服务器的命令。
    start = "bash start.sh"
    # 或者如果你有 Windows 批处理脚本
    # start = "start.bat"
    
  4. 为每个服务器重复 现在为你想让 AutoServer 管理的每个服务器重复步骤 3。本文档的 命令示例 部分有大量示例命令,可帮助你构建适合自己情况的命令。

安装

  1. 从 版本 页面下载最新版本的 autoserver-velocity-1.x.x.jar。
  2. 将 AutoServer-velocity-x.x.x.jar 文件放入你的 Velocity plugins 文件夹。
  3. 重启你的 Velocity 代理以加载插件。

配置

首次启动后,插件会在 plugins/autoserver 目录中生成 config.toml 文件。修改此文件以适配你的设置。

全局

键名 类型 描述
checkForUpdates boolean AutoServer 是否应在启动时检查更新?
messages table 将发送给玩家的消息。
servers table 每个服务器的配置。

消息

键名 类型 描述
prefix string 添加到显示给玩家的所有消息前的缀。
starting string 当玩家尝试连接到当前离线服务器时显示给玩家的消息。
failed string 如果服务器启动失败或无法连接时显示给玩家的消息。
notify string 当服务器就绪时显示给玩家的消息,表示玩家即将连接。

服务器

键名 类型 描述
startupDelay int 启动服务器后等待连接玩家之前的时间(秒)。
shutdownDelay int 验证服务器是否成功关闭之前的等待时间(秒)。
start string 用于在本地启动服务器的命令。
stop string 用于在本地停止服务器的命令。
workingDirectory string 服务器运行目录的路径。
remote boolean 指定服务器是远程(true)还是本地(false)。
port int 远程服务器监听启动命令的端口号。
preserveQuotes boolean (可选)控制是否保留首尾引号;在非 Windows 系统上默认移除引号,除非显式设置为 true。
security boolean 指定远程服务器是否应在消息上使用安全机制(默认值:true)
autoShutdownDelay int 自动关闭服务器之前等待的持续时间(秒);设置为 0 以禁用此功能。

命令示例

以下是一些命令示例,可帮助你构建 start 和 stop 命令。

运行 Java 命令

使用 java 运行服务器:

start = "java -Xmx4G -Xms4G -jar server.jar nogui"

默认情况下,这将在后台运行进程。如果你需要附加到进程,请考虑在新的终端会话中启动它。在 Linux 上,你可以使用 x-terminal-emulator:

start = "x-terminal-emulator -e java -Xmx4G -Xms4G -jar server.jar nogui"

使用 Bash 或 sh 脚本

使用 Bash 或 sh 运行脚本:

start = "bash start.sh"
stop = "bash stop.sh"

使用 screen

在分离的 screen 会话中运行服务器:

start = "screen -DmS mc-example java -Xmx4G -Xms4G -jar server.jar nogui"
stop = "screen -p 0 -S mc-example -X stuff \"stop\r\""

使用 tmux

在新的 tmux 会话中运行服务器:

start = "tmux new -d -s mc-example 'java -Xmx4G -Xms4G -jar server.jar nogui'"
stop = "tmux send-keys -t mc-example 'stop' C-m"

使用 systemd

如果你有服务器的 systemd 服务,可以这样控制它:

start = "systemctl start myserver"
stop = "systemctl stop myserver"

注意:你可能会遇到权限问题。

使用 Docker

使用 Docker 启动和停止服务器:

start = "docker start mc-example"
stop = "docker stop mc-example"

Windows

使用 batch 脚本

请注意这将在后台运行。

start = "start.bat"

使用 start(Windows 命令提示符)

在新的命令提示符窗口中启动服务器:

start = "cmd /c start \"ExampleTitle\" cmd /c java -Xmx4G -Xms4G -jar server.jar nogui"

使用 PowerShell

在新的 PowerShell 窗口中启动服务器:

start = "powershell -Command Start-Process -FilePath 'java' -ArgumentList '-Xmx4G -Xms4G -jar server.jar nogui'"

在隐藏的 PowerShell 窗口中启动服务器:

start = "powershell -WindowStyle Hidden -Command Start-Process -NoNewWindow -FilePath 'java' -ArgumentList '-Xmx4G -Xms4G -jar server.jar nogui'"

使用 wt

要在同一个 PowerShell 窗口中作为新标签页启动服务器,执行如下命令:

start = "wt -w 0 new-tab -d \"C:/path/to/directory\" \"C:/path/to/script/start.bat\""

workingDirectory 设置对此命令无效,因此工作目录在命令中传递。

使用任务计划程序

如果你有一个启动服务器的计划任务:

start = "schtasks /run /tn \"MinecraftExampleTask\""
stop = "schtasks /end /tn \"MinecraftExampleTask\""

如果你想使用 stop 命令,请勿为此任务使用 batch 脚本。它不会生效,因为它会结束 batch 脚本但不会结束 java 进程。 workingDirectory 设置对此命令无效。要设置工作目录,请进入任务计划程序 GUI 并编辑任务。有一个名为 Start in 的文本框用于设置工作目录。

命令和权限

命令 描述 权限
(无命令,基础权限) 访问任何命令所需的基础权限 autoserver.base
/autoserver reload 重载插件配置。 autoserver.command.reload
/autoserver help 显示包含可用命令的帮助菜单 autoserver.command.help
/autoserver status [<server>] 检查指定服务器或所有服务器的状态(如果未指定) autoserver.command.status
/autoserver start <server> 运行服务器的启动序列 autoserver.command.start
/autoserver stop <server> 运行服务器的停止序列 autoserver.command.stop
/autoserver info <server> 显示指定服务器的详细信息 autoserver.command.info
/autoserver version 插件的版本 autoserver.command.version

远程后端

注意:远程服务器支持的功能可能会随着持续开发而发生变化,请注意这一点。

远程后端支持适用于 PaperMC 和 FabricMC 服务器。远程后端仅用于 远程 服务器启动功能。

  1. 从版本页面下载:
  2. 放入 mods 或 plugins 文件夹。
  3. 重启服务器以生成配置文件。

首次启动后,插件会在 JAR 文件所在目录(mods 或 plugins)中生成 AutoServer/config.yml 文件。

远程后端有几个需要配置的设置。首先你需要设置 server.workingDirectory 和 server.startCommand,用于在远程机器上启动服务器。startCommand 设置遵循与 Velocity 插件的 start 相同的规则,因此请查看 命令示例 获取示例。

除非你有不同的端口可用于后端监听器,否则不需要更改 bootListener 部分。

后端服务器支持后端与 Velocity 插件之间消息的 HMAC 安全机制。要启用此功能,你必须从 Velocity 机器上的 forwarding.secret 文件中复制密钥。然后将 security.enabled 设置为 true,并在 AutoServer 的 Velocity 配置中将该服务器的 security 设置为 true。

以下是一个名为 survival 的远程服务器的示例配置表。放在 Velocity 的 autoserver/config.toml 中:

[servers.survival]
# 指定这是远程服务器
remote = true
# 远程服务器监听启动命令的端口(默认值:8080)。
port = 8080
# 尝试连接玩家之前的等待时间(秒)。
# 对于远程服务器,可能需要更长的延迟。
startupDelay = 120  
# 启用与此后端服务器连接的安全机制。
# 如果未提供,默认值为 true。
security = true

然后是对应 survival 服务器的示例配置。放在远程机器上的 AutoServer/config.yml 中:

bootListener:
  # 此命令用于在服务器关闭时启动 boot listener。
  # 仅在需要时才更改此项。
  runJarCommand: "java -jar %jarName"
  enabled: true
  port: 8080

server:
  workingDirectory: "/home/user/servers/minecraft-server/survival"
  startCommand: "screen -DmS mc-example java -Xmx4G -Xms4G -jar server.jar nogui"

## 安全设置
security:
  # 启用后端与 Velocity 插件之间消息传输的 HMAC 安全机制。
  # 如果省略此设置,默认为 "true"。
  enabled: true

  # 用于 HMAC 认证的共享密钥。
  # 这必须与 Velocity 代理配置文件中的 "forwarding.secret" 相同。
  # 为确保正确认证,请直接从 Velocity 的配置文件中复制该值。
  # 将此替换为 Velocity forwarding.secret 中的确切值
  secret: "xxxxxxxxxxxx"

PaperMC 后端

PaperMC AutoServer 插件支持通过后端服务器上可用的 /autoserver reload 命令热重载配置文件。

Boot Listener

Boot Listener 是一个等待并监听来自 Velocity 插件的启动服务器命令的软件——因此得名 "Boot Listener"。它还包含一个命令行界面(CLI),因此你可以运行诸如 reload 之类的命令来热重载配置文件,而无需重启 Boot Listener。

由于 CLI 支持,你可能希望在允许与之交互的终端中运行 Boot Listener,而不是在后台运行它。为此,请参考 命令示例 部分来帮助构建执行此操作的命令,然后你将 bootListener.runJarCommand 更新为你想要的内容。

例如,如果你想使用 screen,可以这样做:

bootListener:
  runJarCommand: "screen -DmS boot-listener java -jar %jarName%"

故障排除

  • 服务器未启动? 确保 config.toml 中的 start 命令正确且可执行。在新的终端中运行该命令以测试命令输出会很有帮助。