我在 Ubuntu 系统上设置了一个 minecraft 服务器。当我从命令行启动服务器时,服务器会监听标准输入并响应各种命令(例如更改游戏模式、难度级别或时间):
(看这个演示在服务器控制台中输入命令)
但是,我不喜欢锁定我的 root 用户来运行 minecraft,所以今天我设置了一个名为“minecraft”的系统用户:
sudo adduser --system --no-create-home --home /srv/minecraft-server minecraft
sudo addgroup --system minecraft
sudo adduser minecraft minecraft # this adds user "minecraft" the group "minecraft"
我正在使用配置文件以该用户身份启动 minecraft 服务器:
start on runlevel [2345]
console log
chdir /minecraft_server
setuid minecraft
setgid minecraft
respawn
respawn limit 20 5
exec /usr/bin/java -Xms1024M -Xmx1800M -jar minecraft_server.1.8.jar nogui
我想通过标准输入向 minecraft 服务器发送命令,就像我在当前用户下启动它时能够做到的那样。我试过su
和sudo
,但第一个似乎被忽略了,第二个产生了“命令未找到”错误。由于 minecraft 是系统用户,我猜交互式登录被禁用了。
我以前使用过 Linux 系统,但在这方面我不太了解。我该如何将命令传递给 minecraft 用户,然后再传递给 minecraft 服务器?或者在我目前的情况下这是不可能的?
答案1
bodhi.zazen 可能提到“正在屏幕中运行“。我没听说过屏幕但似乎已经解决了这个问题。
首先,我必须删除 minecraft 用户并将其重新创建为普通用户。然后我向 minecraft 用户授予了 minecraft 服务器文件夹的必要权限(使用 chmod)。从新的 minecraft 用户帐户成功启动 minecraft 服务器后,我停止了它并启动了屏幕会话:
然后重新启动 minecraft 服务器(在屏幕内):
然后我使用标准屏幕快捷方式从屏幕分离(Ctrl+a然后就好了d)。 Minecraft 服务器继续在后台运行:
我可以轻松地重新连接以使用以下命令发出命令screen -r
:
我可以在不关闭服务器的情况下结束 SSH 会话,然后从另一台机器重新登录。例如,这里我使用 Android 手机和 JuiceSSH 重新登录:
(请注意,您可以看到我之前发出的命令,因为屏幕从未终止)