我在 Ubuntu 服务器上为 PixArk 服务器创建了一个 systemd 服务,即使服务器崩溃,该服务也能保持服务器运行,并允许在系统重新启动或关闭时安全关闭服务器。代码如下:
[Unit]
Description=PixArk SilentMecha
After=network.target
[Service]
WorkingDirectory=/PixArk
Type=forking
User=mecha
Restart=always
ExecStart=/usr/bin/screen -S PixArk -d -m ./start_server.sh
ExecStop=/PixArk/rconcli/rcon-cli --config /PixArk/PixArk.yaml "ServerChat SERVER SHUTTING DOWN IN 15 SECONDS..."
ExecStop=/bin/sleep 5
ExecStop=/PixArk/rconcli/rcon-cli --config /PixArk/PixArk.yaml "ServerChat SERVER SHUTTING DOWN IN 10 SECONDS..."
ExecStop=/bin/sleep 5
ExecStop=/PixArk/rconcli/rcon-cli --config /PixArk/PixArk.yaml "ServerChat SERVER SHUTTING DOWN IN 5 SECONDS..."
ExecStop=/bin/sleep 5
ExecStop=/PixArk/rconcli/rcon-cli --config /PixArk/PixArk.yaml "saveworld"
ExecStop=/bin/sleep 1
ExecStop=/PixArk/rconcli/rcon-cli --config /PixArk/PixArk.yaml "DoExit"
[Install]
WantedBy=multi-user.target
start_server.sh 文件如下所示:
#!/bin/bash
wine64 /PixArk/ShooterGame/Binaries/Win64/PixARKServer.exe CubeWorld_Light?DelayRegisterServer=True?bRawSockets=True?SessionName="SilentMecha"?MaxPlayers=20?RCONEnabled=True?RCONPort=27017? -server -gameplaylogging -log -CULTUREFORCOOKING=en -NoBattlEye -QueryPort=27016 -Port=27015 -CubePort=27018 -cubeworld=SilentMecha -NoHangDetection
我有它的工作。它启动了,但是当我运行命令时,sudo systemctl stop PixArk
它会挂起很长时间,然后命令完成。我为我的 Minecraft 服务器创建了一个完全相同的服务,它在完成最后一个 ExecStop 命令后立即完成。我有什么遗漏的吗?请有人在这方面帮助我,因为我还不是使用 systemd 的专家。它确实会停止,但在您可以执行另一个命令之前,它返回到 shell 的时间比我的世界服务器要长。
因此,如果我手动运行命令,我可以在 20 秒内完成所有操作。当使用 systemd 运行时,sudo systemctl stop PixArk
大约需要一到两分钟才能返回到终端。我试图找出故障的原因是因为它的工作原理是在关闭系统之前安全地停止 PixArk 服务器。如果需要很长时间才能完成,那么我担心它会使关闭序列比应有的时间长 2 分钟。目前这不是一个主要问题,但我想找出我的错误在哪里。也许我错过了一些简单的事情。