我正在尝试为我的孩子设置一个我的世界服务器,而屏幕正适合我。我一直在关注this教程,并且已经咨询了this AskUbuntu答案。我在Ubuntu 16.04.5 x64上运行。我创建了以下服务文件,并将其链接到/etc/systemd/system/minecraft.service。
[Unit]
Description=Minecraft Server
Documentation=
Wants=network.target
After=network.target
[Service]
User=minecraft
Group=minecraft
Nice=5
EnvironmentFile=-/var/minecraft/unit.conf
KillMode=none
SuccessExitStatus=0 1
ProtectHome=true
ProtectSystem=full
PrivateDevices=true
NoNewPrivileges=true
PrivateTmp=true
InaccessibleDirectories=/root /sys /srv -/opt /media -/lost+found
ReadWriteDirectories=/var/minecraft/server /usr/bin/screen
WorkingDirectory=/var/minecraft/server
#ExecStartPre= /usr/bin/screen -dmS Minecraft
ExecStart= /usr/bin/screen -dm -S Minecraft '/usr/bin/java -Xmx1500M -Xms1024M -jar /var/minecraft/server/craftbukkit-1.13.jar'
ExecStop=/usr/bin/screen -S minecraft -p 0 -X stuff "stop^M"
[Install]
WantedBy=multi-user.target
当我监视服务启动时,会在journalctl日志中得到以下内容:
Aug 05 14:55:41 spigot-1 systemd[1]: Started Minecraft Server.
Aug 05 14:55:41 spigot-1 screen[9869]: No screen session found.
根据我引用的SO帖子,我已经更改了/ var / run / screen中的权限。这是当前设置:
root@spigot-1:/var/minecraft/server# ls -alR /var/run/screen/
/var/run/screen/:
total 0
drwxrwxrwx 4 root root 80 Aug 5 14:12 .
drwxr-xr-x 23 root root 860 Aug 5 14:11 ..
drwx------ 2 minecraft minecraft 40 Aug 5 14:55 S-minecraft
drwx------ 2 root root 40 Aug 5 14:50 S-root
/var/run/screen/S-minecraft:
total 0
drwx------ 2 minecraft minecraft 40 Aug 5 14:55 .
drwxrwxrwx 4 root root 80 Aug 5 14:12 ..
/var/run/screen/S-root:
total 0
drwx------ 2 root root 40 Aug 5 14:50 .
drwxrwxrwx 4 root root 80 Aug 5 14:12 ..
**调试说明** 您将在其中看到注释的ExecStartPre命令...如果尝试使用该命令启动屏幕会话,则所有操作都将导致我收到第二个“未找到屏幕会话”错误。
我可以使用'screen -dmS Minecraft [..]'从命令行启动服务器并重新连接。我可以以root用户和“ minecraft”用户身份进行操作。
任何帮助将不胜感激
答案 0 :(得分:1)
我没有Ubuntu,但是我在Fedora 24上尝试了类似的操作,并且出现了类似的错误。为了进行调查,我在strace
命令中添加了screen
,并删除了PrivateTmp
,以便获得跟踪输出。
ExecStart=/bin/strace -o /tmp/s -f screen -dm -S me bash -c 'sleep 999'
在输出中,我发现最后screen
试图打开一个伪tty,但没有成功:
open("/dev/ptmx", O_RDWR) = -1 EACCES (Permission denied)
...
write(1, "No more PTYs.\r\nSorry, could not "..., 52) = 52
我向单元添加了一些ls -l /dev
命令,以查看PrivateDevices=true
选项的效果。确实有一个/dev/ptmx
文件,但与我的真实/dev
不同,它是指向/dev/pts/ptmx
的符号链接,而不仅仅是特殊字符设备。出于某些原因,我的系统上有:
$ ls -l /dev/ptmx /dev/pts/ptmx
crw-rw-rw- 1 root tty 5, 2 Aug 6 14:29 /dev/ptmx
c--------- 1 root root 5, 2 Jun 27 08:29 /dev/pts/ptmx
(这可能是一个错误,具体取决于systemd和udev的版本。)
因此,当/dev/ptmx
在专用命名空间中被指向/dev/pts/ptmx
的符号链接替换时,您将无法再打开新的pty。 sudo chmod a+rw /dev/pts/ptmx
是一个简单的测试解决方案,确实使部门工作并开始了screen
进程。
对于您来说可能不是这种情况,但是您可以采用类似的调试方法来尝试查找问题。