如何让程序在启动时启动(无 GUI)

如何让程序在启动时启动(无 GUI)

我目前正在尝试为我和我的孩子们设置一个 Minecraft 来玩。我想做的是找到一种方法,让服务器软件在启动时自动启动,以防万一发生什么事情,并让它在我出门在外时重新启动。正如标题所述,出于性能原因,我在无 GUI 版本上运行它。提前致谢。

答案1

由于这是您在网站上的第一个问题,因此我将尽量详细解释所有内容,以防您对此不熟悉。通常,要在现代 Ubuntu 系统上在启动时运行进程,您需要为“服务单元”设置“Systemd 单元文件”并“启用”该单元,以便它在启动时自动启动。现在,如果您对其中任何内容不清楚,可以谷歌搜索相关术语。

根据您启动的服务,具体情况可能会有所变化,但对于所有服务来说,这都是高级过程。

对于我的世界,看起来像是一个合理的指南。根据 askubuntu 的指导方针,我将尝试在此总结指南的要点(并添加一些他们遗漏的内容)

创建用于运行 minecraft 服务器的用户/组

出于显而易见的原因,我们将其称为“minecraft”用户和“minecraft”用户组 ;-) 我们创建此用户是因为它比重新使用您自己的用户/组更安全。如果 minecraft 服务器中恰好出现错误,并且您的某个玩家利用了它,我们希望他们造成的损害受到限制。假设该错误允许恶意玩家直接在您的服务器上运行命令。如果您的服务器以单独的“minecraft”用户和组运行,他们只能以该用户的身份运行命令,这非常严格。最坏的情况是,他们可能会损坏您的 minecraft 安装,这令人沮丧但不是灾难性的。如果您没有创建新用户/组,并且使用该用户root(可以做任何事情的用户)运行 minecraft,那么同样的假设攻击将从“令人沮丧”变成“我的整个系统受到损害,所有数据都被从我的服务器上窃取”

$ sudo adduser minecraft

按照提示设置新用户。如果您好奇,还有比这个更好的命令可用(例如,您实际上不需要此用户的 shell 或主目录),但这也可以正常工作

创建服务单元文件

使用您选择的编辑器(您需要超级用户权限,因此在命令前加上前缀,sudo例如,创建一个包含以下内容的sudo nano文件:/etc/systemd/system/minecraft.service

[Unit]
Description=Minecraft server
Wants=network.target
After=local-fs.target network.target

[Service]
User=minecraft
Group=minecraft
UMask=0027

EnvironmentFile=/etc/conf.d/minecraft
KillMode=none
SuccessExitStatus=0 1 255

NoNewPrivileges=true
PrivateDevices=true
PrivateTmp=true
ProtectHome=true
ProtectSystem=full

WorkingDirectory=~
ExecStart=/usr/bin/java -Xms${MINHEAP} -Xmx${MAXHEAP} -XX:ParallelGCThreads=${THREADS} -jar server.jar --nogui
# ExecStop=/usr/bin/mcrcon -H localhost -p ${RCON_PASSWD} stop

[Install]
WantedBy=multi-user.target

注意 1:我注释掉了 mcrcon 依赖项。如果您想要稍微好一点的服务器,请安装它并取消注释 ExecStop 行。注意 2:请根据需要随意更改 ExecStart 行。例如,如果您想将完整路径放入您自己的server.jar,您可以通过更改 ExecStart 行来实现

创建环境文件

仅供参考,我们只需要此步骤,因为之前的单元文件/etc/conf.d/minecraft在 ExecStart 行中引用并使用了这些变量。如果我们将单元文件内容更改为不是需要一个环境文件,我们就不必创建这个了。

sudo nano再次使用、 at创建一个文件/etc/conf.d/minecraft并为其赋予以下内容:

# RCON_PASSWD needs to be identical rcon.password in server.properties
RCON_PASSWD=example
MINHEAP=2G
MAXHEAP=4G
THREADS=6

启用您的单元文件

$ sudo chmod 644 /etc/systemd/system/minecraft.service

启动您的服务(这是一次性的“启动”),然后检查其状态。确保您可以登录并且一切正常。如果遇到问题,请使用该stop命令,修复问题,然后重新运行该start命令并再次检查状态。重复此操作,直到一切正常

$ sudo systemctl start minecraft
$ sudo systemctl status minecraft

一旦一切正常,启用该服务使其在启动时自动运行:

$ sudo systemctl enable minecraft

相关内容