双击只会将其作为档案打开。
那么,在 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