Systemd 在 Ubuntu 18.04 上同时运行启动和停止命令 - Minecraft 服务器问题

Systemd 在 Ubuntu 18.04 上同时运行启动和停止命令 - Minecraft 服务器问题

更新:

仍然有这个问题。我注意到,当我运行“systemctl start minecraft.service”时,我的 systemd 服务正在按顺序运行 ExecStart 和 ExecStop 命令。我已经从 tmux 控制台的输出和 systemd 状态验证了这一点,如下所示。因此它正确地调用了 mc_server.sh 脚本,但我无法让它停止调用“ExecStop”命令。我尝试过删除 Type= 设置(默认为 simple),直接将 Type 更改为 simple,但这些似乎都无法解决问题。

原始问题:

我最近升级到了 18.04.1,但无法让我的 Minecraft systemd 服务再次运行。我从 16.04 全新安装了 18.04。此服务在 16.04 上正常运行,但现在似乎无法正常工作。当我运行“systemctl start minecraft.service”时,根据下面的状态输出,它似乎会同时运行 ExecStart 脚本和 ExecStop 脚本,但我没有在 tmux 控制台中看到它应该运行的脚本的任何输出。如果我手动调用启动脚本,它可以正常工作,因此 systemd 服务中存在问题。

该服务设置为以 minecraft 用户身份在 minecraft 组下运行。/srv/minecraft 中的所有内容均归 minecraft 用户/组所有。minecraft.service 文件归 root 所有。所有这些都与 16.04 运行时相同。如果您有任何让它再次运行的想法,请告诉我!谢谢!!

:/etc/systemd/system$ systemctl status minecraft.service
● minecraft.service - Minecraft Server
   Loaded: loaded (/etc/systemd/system/minecraft.service; enabled; vendor 
   preset
   Active: inactive (dead) since Wed 2018-11-14 16:33:25 PST; 3s ago
  Process: 4667 ExecStop=/srv/minecraft/mc_server.sh stop (code=exited, 
  status=0/SUCCESS)
  Process: 4651 ExecStart=/srv/minecraft/mc_server.sh start (code=exited, 
  status=0/SUCCESS)

Nov 14 16:33:11 systemd[1]: Starting Minecraft Server...
Nov 14 16:33:11 mc_server.sh[4651]: Session found.  Connecting.
Nov 14 16:33:11 mc_server.sh[4651]: Minecraft server successfully 
started
Nov 14 16:33:11 mc_server.sh[4667]: step 1 successs
Nov 14 16:33:19 mc_server.sh[4667]: step 2 success
Nov 14 16:33:21 mc_server.sh[4667]: server shutdown success
Nov 14 16:33:25 systemd[1]: Started Minecraft Server.

以下是 systemd 脚本:

# Source: https://github.com/agowa338/MinecraftSystemdUnit/
# License: MIT
[Unit]
Description=Minecraft Server
After=network.target auditd.service

[Service]
WorkingDirectory=/srv/minecraft/
# PrivateUsers=true
User=minecraft
Group=minecraft
ProtectSystem=full
ProtectHome=true
# ProtectKernelTunables=true
# Implies MountFlags=slave
# ProtectKernelModules=true
# Implies NoNewPrivileges=yes
# ProtectControlGroups=true
# Implies MountAPIVFS=yes
Type=forking

ExecStart=/srv/minecraft/mc_server.sh start

ExecStop=/srv/minecraft/mc_server.sh stop

Restart=on-abnormal
RestartSec=60s

[Install]
WantedBy=multi-user.target

答案1

好的,我明白了。下面是我为使这项服务重新运行所采取的措施。

添加指令“RemainAfterExit=yes”似乎解决了 ExecStop 命令在启动命令后立即运行的问题。这有点奇怪,因为在 16.04 中使用相同的设置,当 Type 设置为 forking 时,我不需要 RemainAfterExit 选项。但显然现在你需要它?

如果有人遇到类似的问题,这里是我当前的 systemd Unit 文件:

# Source: https://github.com/agowa338/MinecraftSystemdUnit/
# License: MIT
[Unit]
Description=Minecraft Server
After=network.target

[Service]
User=minecraft
Group=minecraft

WorkingDirectory=~

Type=simple
RemainAfterExit=yes

PIDFile=/srv/minecraft/minecraft_process.pid

ExecStart=/srv/minecraft/mc_server.sh start

ExecStop=/srv/minecraft/mc_server.sh stop

[Install]
WantedBy=multi-user.target

答案2

这可能不是您的 systemd,但可能是它调用的脚本出现了问题。

/srv/minecraft/mc_server.sh

您是否尝试过直接运行它并且有效?

正常情况下这应该可以工作,因为我没有看到你的脚本调用 tmux,它应该是这样的。

tmux new -s my_session
run your command to start the server
tmux detach

相关内容