如何让服务立即停止?

如何让服务立即停止?

我使用了脚本这里创建一个服务来在启动和关闭时启动和停止 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 秒左右,最后几个屏幕上会显示出系统关闭前的信息。

我假设这意味着服务被“告知”在关闭过程中尽早停止,但需要一段时间才能完成(因为它在服务器上发送警报、等待、保存等),而系统处于关闭状态等待脚本执行此操作时,它会停止其他服务,这会导致所有客户端在显示警告消息之前断开连接。我已经尝试添加$networkRequired-Stop无济于事。

我需要做的是让服务立即停止,而其他服务不能同时停止。我该怎么办呢?

我在 XenServer 上使用 Ubuntu 15.04。

查看完整的关机日志这里

相关内容