0

我正在使用启动脚本通过 CentOS 上的 webmin 启动我们的 Minecraft 服务器。它在启动服务器本身之前备份了一些文件。最近,我们意外地连续两次执行了脚本,从而弄乱了我们的数据,这导致两个 Minecraft 服务器实例正在运行,并且所有数据文件等都出现了混乱。

为了防止这种情况发生,我希望脚本在检测到进程正在运行时终止。我已经搜索过类似的问题,并且建议使用锁定文件之类的内容,但我没有机会删除这些内容,因为启动脚本只为 Minecraft 服务器进程设置了一个屏幕,而停止服务器通常由通过游戏内命令终止屏幕或停止服务器。

使用以下命令启动服务器进程:

screen -dmS minecraft java -Xincgc -Xmx2G -jar server.jar

如何让启动脚本检测此进程是否已在运行,然后自行终止?

4

2 回答 2

3

使用这个脚本:

#!/bin/bash
LOCKDIR="/path/to/lockdir"

if [ ! mkdir "$LOCKDIR" ]; then
    echo >&2 "Server is already running"
    exit 1
fi

# Here: when exiting, or receiving any of the mentioned signals, remove the lock file      
trap "rmdir \"$LOCKDIR\"" exit INT HUP TERM QUIT
 
# It would be tempting to exec instead, but DON'T DO IT: otherwise the trap is forgotten
minecraft java -Xincgc -Xmx2G -jar server.jar

exit $?

并在您的屏幕中启动它。

于 2012-01-01T20:24:28.837 回答
1

这些链接可能会给你一些想法: http: //mywiki.wooledge.org/ProcessManagement - http://mywiki.wooledge.org/BashFAQ/042 - http://mywiki.wooledge.org/BashFAQ/033 - http: //mywiki.wooledge.org/BashFAQ/045

于 2012-01-01T20:28:13.843 回答