我是 Linux 新手,4 个月前才从 Windows 转过来。我正在尝试使用这教程,当我尝试通过 systemd 启动服务器并检查其状态时,我不断收到此信息:
Loaded: loaded (/etc/systemd/system/minecraft.service; disabled; vendor preset: enabled)
Active: failed (Result: exit-code) since Tue 2022-07-19 22:32:20 PDT; 6s ago
Process: 21308 ExecStart=/usr/bin/java -Xmx1024M -Xms1024M -jar server.jar nogui (code=exited, status=200/CHDIR)
Main PID: 21308 (code=exited, status=200/CHDIR)
CPU: 14ms
Jul 19 22:32:20 myname-ThinkPad systemd[1]: Started Minecraft Server.
Jul 19 22:32:20 myname-ThinkPad systemd[21308]: minecraft.service: Changing to the requested working directory failed: Permission denied
Jul 19 22:32:20 myname-ThinkPad systemd[21308]: minecraft.service: Failed at step CHDIR spawning /usr/bin/java: Permission denied
Jul 19 22:32:20 myname-ThinkPad systemd[1]: minecraft.service: Main process exited, code=exited, status=200/CHDIR
Jul 19 22:32:20 myname-ThinkPad systemd[1]: minecraft.service: Failed with result 'exit-code'.
我确实在几个地方偏离了教程,我确信问题就出在那里。出于几个原因,我使用自己的用户配置文件来安装服务器,而不是单独创建一个,但我确保相应地更改了路径。我还必须安装 Oracle Java,因为 OpenJDK 在安装服务器文件时遇到了问题(我使用的是 1.19 而不是 1.16,后者是教程中链接的版本)。
这是 systemd 文件:
[Unit]
Description=Minecraft Server
After=network.target
[Service]
User=myname
Nice=1
KillMode=none
SuccessExitStatus=0 1
ProtectHome=true
ProtectSystem=full
PrivateDevices=true
NoNewPrivileges=true
WorkingDirectory=/home/myname/mc_server/server
ExecStart=/usr/bin/java -Xmx1024M -Xms1024M -jar server.jar nogui
ExecStop=/home/myname/mc_server/tools/mcrcon/mcrcon -H 127.0.0.1 -P 25575 -p serverpasswd stop
[Install]
WantedBy=multi-user.target
所以我想我的问题是,有没有办法解决这个问题,而不需要创建单独的用户配置文件或返回到 OpenJDK(以及旧版本的游戏)?
答案1
问题是你设置了ProtectHome=true
,这限制了服务对 的访问/home
,但同时又希望服务能够cd
。/home
它无法做到这一点,因为它被设置为ProtectHome
,因此它会给出你看到的错误:
Changing to the requested working directory failed: Permission denied
解决此问题的方法是:
/opt
按照教程说明将 Minecraft 文件放入- 从服务文件中删除该
ProtectHome
行以允许服务访问/home
。