如果进程已在运行,则终止bash脚本

时间:2012-01-01 20:20:18

标签: linux bash minecraft

我正在使用启动脚本通过CentOS上的webmin启动我们的Minecraft服务器。它在启动服务器之前备份了几个文件。最近我们连续两次意外地执行脚本搞乱了我们的数据,这导致两个Minecraft服务器实例运行,一切都变得混乱了数据文件等。

为了防止这种情况发生,我希望脚本在检测到进程正在运行时终止。我一直在寻找类似的问题,建议使用像锁文件这样的东西,但我没有机会删除那些,因为启动脚本只为Minecraft服务器进程设置了一个屏幕,停止服务器通常由终止屏幕或通过游戏命令停止服务器。

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

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

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

2 个答案:

答案 0 :(得分: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 $?

并在您的屏幕中启动它。

答案 1 :(得分:1)