当前位置: 首页 > 知识库问答 >
问题:

Raspberry pi:将“屏幕”和Systemd关联起来,在pi开始时自动启动minecraft服务器

黄宏毅
2023-03-14

我是raspberry pi编程的新手,我希望能够在pi的开头启动一个minecraft服务器。

为此,我已经学习了Systemd文件和screen命令。

我设法让他们分开工作,但不是一起工作,这就是我在那里寻求帮助的原因。

首先,我使用Raspberry pi 4 4Go和raspbian v10,并用java 8伪造1.12.2。我做了一个. sh文件来更容易地启动服务器:

#!/bin/bash
screen -S mcserver -dm java -Xms1024M -Xmx2048M -jar /home/pi/MinecraftServer/server/forge-1.12.2-14.23.5.2854.jar nogui

当我运行文件时,服务器会在我想要的套接字中完美启动。

其次,我有一个system d文件(auto-run-server.service):

[Unit]
Description=Auto run mc server
[Service]
ExecStart=/home/pi/MinecraftServer/server/minecraft.sh
[Install]
WantedBy=multi-user.target

但是当我执行服务时,什么都没有发生,服务的状态显示成功,但是屏幕上什么都没有(屏幕列表)

当我将ExecStart值替换为

execstart=java-Xms1024M-Xmx2048M-jar /home/pi/MinecraftServer/server/forge-1.12.2-14.23.5.2854.jarnogui

服务器启动了,但问题是我想访问一个终端来运行minecraft服务器中的命令,而我没有找到从那里访问的解决方案。(这就是我想创建“屏幕”的原因)

我完全接受你的答案,即使他们不使用“屏幕”,只要我能访问服务器终端。

提前谢谢。

共有1个答案

陆仲渊
2023-03-14

我使用以下system d单元进行测试:

[Service]
ExecStart=/tmp/screentest.sh

这是屏幕测试。shshell脚本:

#!/bin/sh

screen -S mcserver -dm sh -c 'while :; do date; sleep 5; done'

如果我启动服务(system ctl start Screentest),然后运行system ctl statesfinentest,我看到:

● screentest.service
   Loaded: loaded (/etc/systemd/system/screentest.service; static; vendor preset: enabled)
   Active: inactive (dead)

这里的问题是,当使用-d运行时,屏幕命令会立即退出,因此system d认为该命令已经完成并通过删除服务产生的任何其他进程来清理所有内容。

我们可以通过将服务类型设置为forking,告诉systemd,该服务生成一个子服务并退出:

[Service]
Type=forking
ExecStart=/tmp/screentest.sh

有了这一变化,在启动服务后,我们看到:

● screentest.service
   Loaded: loaded (/etc/systemd/system/screentest.service; static; vendor preset: enabled)
   Active: active (running) since Sun 2021-01-10 09:58:11 EST; 4s ago
  Process: 14461 ExecStart=/tmp/screentest.sh (code=exited, status=0/SUCCESS)
 Main PID: 14463 (screen)
    Tasks: 3 (limit: 4915)
   CGroup: /system.slice/screentest.service
           ├─14463 SCREEN -S mcserver -dm sh -c while :; do date; sleep 5; done
           ├─14464 sh -c while :; do date; sleep 5; done
           └─14466 sleep 5

屏幕-列表显示:

root@raspberrypi:/etc/systemd/system# screen -list
There is a screen on:
        14612.mcserver  (01/10/2021 10:01:55 AM)        (Detached)
1 Socket in /run/screen/S-root.
 类似资料:
  • 我很久以前做了一些自定义systemd服务,都有相同的配置(当然ExecStart除外) 这种配置已经运行了很多年,从18.04版LTS开始,我已经启动并运行了ubuntu,但是现在看起来有些systemd服务根本没有启动,配置如下(myapp.service): 服务已启用: 如果在重新启动后执行“systemctl status myapp”: 如果我在重新启动后执行“Journal alct

  • 我为javafx应用程序使用启动屏幕功能。我使用javafx ant任务按fx: jar、fx: signjar、fx:部署的顺序运行以生成jar文件、jnlp文件、html文件和包括“image”和“exe”在内的nativeBundle。双击打包在. jar文件中时,启动运行良好。但是,当我双击应用程序映像文件夹中的exe文件或通过运行. exe设置文件设置后的快捷方式时,没有启动屏幕。为什么

  • 我有一个spring boot可执行罐,装在数字海洋水滴中。我可以使用现在我想让我作为一个服务运行。 我已经创建了文件/etc/systemd/system/myapp。用这些内容服务 然后使其在系统启动时启动 我正在尝试启动服务 但是我得到了这个错误 无法启动myapp.service:未知单位:myapp.service详情请参阅系统日志和'systemctl statusmyapp.serv

  • 我使用一个空活动为我的应用程序创建了一个启动屏幕,该活动在背景图像中保持可见3秒钟。通常,应用程序在背景图像变为可见之前以白色屏幕启动,然而,有些应用程序已经以“真实”的初始屏幕图像启动。如何实现这一点?

  • 当我启动我的应用程序时,我会看到一个白色的屏幕,几秒钟后就会出现闪屏。 我想知道我的应用程序的大小是否会影响它(它是17.7MB)。或者是因为我的测试机是旧的(HTC欲望高清),有点垃圾与太多的数据? 还是正常行为?或者问题在我的代码里,在下面... 舱单的一部分: 飞溅活动: 谢谢

  • 当我运行Minecraft forge时,就会发生这种情况 启动时,会在中发生