繁体   English   中英

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

[英]Terminate bash script if process already running

我正在使用启动脚本通过CentOS上的webmin启动我们的Minecraft服务器。 在启动服务器本身之前,它会备份一些文件。 最近,我们无意中连续两次执行了脚本,从而弄乱了数据,导致运行了Minecraft服务器的两个实例,数据文件之类的东西一团糟。

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

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

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

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

使用此脚本:

#!/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 $?

并在屏幕上启动它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM