我使用了脚本这里创建一个服务来在启动和关闭时启动和停止 Minecraft 服务器。该脚本基本上在 GNU 屏幕中启动服务器 jar 文件(它也执行备份和更新,但它们工作正常)。
这可以正常启动服务器,但会突然停止服务器,而不是在服务器上发送消息,然后使用命令/stop
正常停止服务器(因为脚本应该执行并且如果sudo service minecraft stop
在系统仍在运行时调用则确实执行)。
我使用sudo update-rc.d minecraft defaults 20 01
它应该确保服务器是最先停止的进程之一。
我可以看出这是有效的,因为关闭开始后显示的前四行是:
[ OK ] Stopped target Graphical Interface.
Starting Unattended Upgrades...
[ OK ] Stopped target Multi-User System
Stopping LSB: Minecraft server...
然后有一堆 Stopping 和 Stopped 消息。在此期间服务器突然停止(客户端都在没有警告的情况下断开连接),然后是这样的:
[******] A stop job is running for LSB: Minecraft server (17s / 5min)
秒数通常会持续到 17 秒左右,最后几个屏幕上会显示出系统关闭前的信息。
我假设这意味着服务被“告知”在关闭过程中尽早停止,但需要一段时间才能完成(因为它在服务器上发送警报、等待、保存等),而系统处于关闭状态等待脚本执行此操作时,它会停止其他服务,这会导致所有客户端在显示警告消息之前断开连接。我已经尝试添加$network
但Required-Stop
无济于事。
我需要做的是让服务立即停止,而其他服务不能同时停止。我该怎么办呢?
我在 XenServer 上使用 Ubuntu 15.04。
查看完整的关机日志这里。