Systemd 单元文件仅适用于一个实例名称,不适用于其他实例名称

Systemd 单元文件仅适用于一个实例名称,不适用于其他实例名称

我的 Debian 服务器上运行着两个 Minecraft 服务器。为了避免手动协调多个 tmux 会话的繁琐工作,我编写了一个 systemd 单元文件来帮我完成所有这些工作:

[Unit]
Description=Minecraft Server: %i
After=network.target

[Service]
WorkingDirectory=/opt/minecraft/servers/%i
User=minecraft
Group=minecraft
Type=forking
RemainAfterExit=yes

#Restart=on-abnormal

ExecStart=/usr/bin/tmux new -s mc-%i -d '/usr/bin/java -Xms1G -Xmx4G -jar forge-universal.jar nogui'

ExecStop=/usr/bin/tmux send -t mc-%i 'say SERVER WILL SHUT DOWN IN 10 SECONDS' ENTER
ExecStop=/bin/sleep 10
ExecStop=/usr/bin/tmux send -t mc-%i 'stop' ENTER

[Install]
WantedBy=multi-user.target

/opt/minecraft/servers/:private和中有两个子目录otherserver。这些目录的文件列表如下所示:

minecraft@server ~ # ls -la /opt/minecraft/servers/private/
total 39180
drwxr-xr-x  9 minecraft minecraft     4096 Dec 20 21:34 .
drwxr-xr-x  5 minecraft minecraft     4096 Dec 19 21:11 ..
-rw-r--r--  1 minecraft minecraft        2 Dec 20 21:33 banned-ips.json
-rw-r--r--  1 minecraft minecraft        2 Dec 20 21:33 banned-players.json
drwxr-xr-x 10 minecraft minecraft     4096 Oct 11 16:22 config
drwxr-xr-x  2 minecraft minecraft     4096 Oct 11 16:11 crash-reports
-rw-r--r--  1 minecraft minecraft      181 Oct 11 16:11 eula.txt
-rw-r--r--  1 minecraft minecraft  4888981 Oct 11 16:10 forge-1.12.2-14.23.5.2768-universal.jar
lrwxrwxrwx  1 minecraft minecraft       39 Oct 11 11:41 forge-universal.jar -> forge-1.12.2-14.23.5.2768-universal.jar
drwxr-xr-x  3 minecraft minecraft     4096 Apr 14  2018 journeymap
drwxr-xr-x  8 minecraft minecraft     4096 Apr 14  2018 libraries
drwxr-xr-x  2 minecraft minecraft     4096 Dec 20 21:32 logs
-rw-r--r--  1 minecraft minecraft      369 Oct 11 15:04 mapcrafter.conf
-rw-r--r--  1 minecraft minecraft 30222121 Oct 11 16:10 minecraft_server.1.12.2.jar
drwxr-xr-x  3 minecraft minecraft     4096 Oct 11 16:21 mods
-rw-r--r--  1 minecraft minecraft      271 Dec 20 21:33 ops.json
-rw-r--r--  1 minecraft minecraft      843 Dec 20 21:33 server.properties
-rw-r--r--  1 minecraft minecraft      322 Dec 20 21:32 usercache.json
-rw-r--r--  1 minecraft minecraft      112 Oct 13 23:18 usernamecache.json
-rw-r--r--  1 minecraft minecraft      171 Dec 18 22:07 whitelist.json
drwxr-xr-x 11 minecraft minecraft     4096 Dec 20 21:33 world

执行结果会为被调用systemctl start minecraft@otherserver用户生成一个新的 tmux 会话,并成功启动 Minecraft 服务器。minecraftmc-otherserver

systemctl start minecraft@private另一方面,执行则实际上什么都不做。该命令立即返回,不会生成新的 tmux 会话,不会启动新的 Minecraft 服务器,什么都没有。我检查了 Minecraft 实例是否只是崩溃了,但事实并非如此。tmux new -s mc-private -d 'java -Xms1G -Xmx4G -jar forge-universal.jar nogui在服务器目录中手动执行可以完美运行,并按预期在新的 tmux 实例中启动 Minecraft 服务器。

奇怪的是,这两台服务器几天前都正常工作。我检查了 systemd 和 tmux 的更新日志,但据我所知,它们实际上已经有几周没有针对 Debian 稳定版进行更新了。

此外,它journalctl根本不包含有关我的失败单元文件的信息,所以我很困惑。有人知道是什么原因造成的吗?

答案1

唉。原来该minecraft@private服务被列为loaded failed failedsystemctl list-units因此无法再次启动。

这样做就systemctl reset-failed解决了我的问题。

相关内容