我的 Systemd 服务文件有什么问题?

我的 Systemd 服务文件有什么问题?

我一直在尝试让 systemd 服务运行一段时间,但一直没有成功。我想做的是创建一个启动脚本,用于启动经过修改的 Minecraft 服务器的 Java 程序。

这是名为 的 systemd 服务文件ftbstart.service。它位于 中/etc/systemd/system/,权限为 744(尽管我测试了各种不同的权限)。

[Unit]
Description=FTB Server
After=network.target

[Service]
Type=forking
User=root
Group=root
RemainAfterExit=yes

ExecStart=/usr/games/ftb/sstart.sh
ExecStop=/usr/games/ftb/sstop.sh

[Install]
WantedBy=multi-user.target

因此 ExecStart 启动另一个具有权限 755 的脚本, sstart.sh其中包含以下行:

#!/bin/bash

echo I made it to 1
mount -t tmpfs -o size=1024M tmpfs /usr/games/ftb/current/
echo I made it to 2
cp -r /usr/games/ftb/beyond/. /usr/games/ftb/current/
echo I made it to 3
/usr/bin/screen -S ftb -d -m /usr/games/ftb/current/ServerStart.sh
echo I made it to 4

echo 是为了调试目的。脚本会一直运行,如下所示

journalctl -u ftbstart

显示 1-4 的所有回声,但是 screen -list 之后不显示任何活动屏幕

systemctl restart ftbstart

/usr/games/ftb/sstart.sh但是,如果我从命令行执行脚本,/bin/bash它可以完美运行并且启动没有问题。

到目前为止我尝试过的事情:

  • 添加到文件#!/bin/bash顶部ftbstart.service
  • 移除After=
  • 更改/删除Type=Type=simpleType=forking
  • 更改/删除User=Group=
  • ftbstart.service更改文件权限sstart.sh
  • 放置ExecStart=/bin/bash /usr/games/ftb/sstart.sh

我还确保输入:

systemctl daemon-reload

systemctl restart ftbstart

每次我测试ftbstart.service文件中的某些内容等等,但似乎都没有任何效果。

我也尝试过只添加一行

ExecStart=/usr/bin/screen -S ftb -d -m /usr/games/ftb/current/ServerStart.sh

到 ftbstart.service 但它仍然不执行屏幕服务,但是

systemctl status ftbstart

只显示类似以下内容的内容:

Active: active (exited) since Thu 2017-09-07 20:56:35 UTC; 32min ago

但是,如果我将其替换ExecStart=ftbstart.service以下内容:

ExecStart=screen -S top -d -m /usr/bin/top

然后它就神奇地工作了!它创建了一个可以附加的屏幕,并显示顶部命令行资源监视器。

所以,很抱歉问了这么长的问题,但有人能帮我找出我做错的地方吗?我猜是因为我正在启动另一个脚本而不是程序,所以有些地方出了问题,但我不确定。感谢您提供的任何帮助。

PS 如果有必要,这里是启动脚本sstart.sh。我没有创建这个,它是 minecraft modpack 附带的脚本:https://pastebin.com/muCy0xnh

相关内容