无法再在 Ubuntu 17.10 上右键单击并运行 MC.Jar(Minecraft)

无法再在 Ubuntu 17.10 上右键单击并运行 MC.Jar(Minecraft)

双击只会将其作为档案打开。

那么,在 Ubuntu 17.10 下运行 Jar 文件的解决方案是什么。如果我右键单击并选择查找应用程序,Java 8 不会显示?

&>java -version
openjdk version "1.8.0_144"
OpenJDK Runtime Environment (build 1.8.0_144-8u144-b01-2-b01)
OpenJDK 64-Bit Server VM (build 25.144-b01, mixed mode)

答案1

根据您的用户名,我假设您正在尝试运行专用服务器,并将以此方式发布我的答案。该系统已经过实战测试,目前由我担任基础设施管理员的网络使用(以及其他花哨的功能),以及无数其他入门级服务器和生产网络。

如果你想要一个持久的自动重启服务器,你可以看看创建systemd服务您的服务器。您将失去 GUI 和无头界面,但您仍然可以通过远程控制或类似的东西。

实际上,您需要创建一个新用户(我们称之为mcserver)来处理您的服务器任务:

sudo adduser --system --disabled-login --group --home /opt/mcserver 

接下来,您需要切换到该用户:

sudo -u mcserver
cd /opt/mcserver

当您在这里时,请复制您的所有游戏服务器文件以及其他内容。

接下来,创建一个新脚本来启动你的服务器。不是包括任何重新启动逻辑或类似逻辑。它应该非常简单:

#!/bin/bash
/usr/bin/java -Xms1024M -Xmx4G -jar -XX:+UseConcMarkSweepGC -jar minecraft.jar --nojline --noconsole

使用 将文件标记为可执行文件chmod +x mcserver.sh

您可以exit进行会话mcserver,之后您将不再需要它。

在以下位置创建一个新文件 ( mcserver.service) /etc/systemd/system

sudo nano /etc/systemd/system/mcserver.sh

在此文件中添加以下内容:

[Unit]
Description=Vanilla Minecraft Server

Wants=network.target
After=network.target

[Service]
User=mcserver
Group=mcserver

ProtectHome=true
ProtectSystem=full
PrivateDevices=true
NoNewPrivileges=true
PrivateTmp=true
InaccessibleDirectories=/root /sys /srv -/opt /media -/lost+found
ReadWriteDirectories=/var/minecraft/server
WorkingDirectory=/var/minecraft/server    

Restart=on-failure
RestartSecs=5

ExecStart=/opt/mcserver/mcserver.sh

[Install]
WantedBy=multi-user.target

完成后,您需要激活该服务:

sudo systemctl daemon-reload
sudo systemctl enable mcserver.service
sudo systemctl start mcserver.service

服务器现在将在系统启动时自动启动并正常运行。

请注意,服务器将在发生故障时自动重启(非零退出代码),因此/stop将停止服务器而没有重生的机会。虽然您也可以使用 停止服务器systemctl stop mcserver.service,但这样做不安全,因为服务器无法正常停止。但是,您可以使用rcon让上述命令发送正常停止。不过,这将留给读者作为练习。

备份脚本仍然可以运行,但建议使用用户 cron 条目将整个文件夹压缩成 ZIP 文件,然后将其存储在安全的地方。

答案2

我确实编写了一个类似运行服务器的脚本,但肯定有更好的方法。而且,这种方法不太优雅,只需在终端中输入 java -jar MC.jar,这两种方法都会保持终端打开。

#!/bin/sh
while true
do
java -Xms1024M -Xmx4G -jar -XX:+UseConcMarkSweepGC -jar MC.jar
echo "If you want to completely stop the server process now, press 
Ctrl+C before the time is up!"
echo "Rebooting in:"
for i in 5 4 3 2 1
do
echo "$i..."
sleep 1
done
echo "Rebooting now!"
done

相关内容