.sh 没有运行且没有错误

.sh 没有运行且没有错误

我尝试创建一个 .sh 文件来检查服务器是否正在运行,如果没有,则启动它。我没有从该脚本得到任何回显或任何失败但它没有运行。有人可以帮我修复这个问题或更好的方法来纠正它吗?我不是程序员,我只是编辑了其他几个脚本来解决这个问题。

JAVA="java -Xms512M -Xmx3072M -XX:PermSize=128m -jar FTBServer.jar nogui"
DIR="/home/jon/FTB/FTBnew"

if [ "$1" = start ] ; then
    if ps -ef | grep FTBServer.jar | grep -v -q grep ; then
        echo "Minecraft is already running"
    else
        echo "Starting!" && cd $DIR && screen -dmS minecraft $JAVA
        sleep 7
        if ps -ef | grep minecraft_server.jar | grep -v -q grep ; then
            echo "Minecraft server started successfully"
        else
            echo "Minecraft server failed to start"
        fi
    fi
fi

这是我得到的,当我运行它时

root@FTB:/home/jon/FTB/FTBnew# bash Check.sh
root@FTB:/home/jon/FTB/FTBnew#

答案1

所有逻辑都在一个if [ "$1" = start ]块内,因此如果您没有在命令行上提供该参数,则您的脚本不会执行任何操作。

您应该首先验证这些论点:

if [ $# -ne 1 ] || [ "$1" != "start" ]; then
    echo "usage: $0 start"
    exit 1
else 
    # your stuff here
fi

答案2

您需要将其运行为

bash Check.sh start

... 因为如果 则什么也不会发生[ "$1" != start ]

另外,这一行

if ps -ef | grep minecraft_server.jar | grep -v -q grep ; then

应该

if ps -ef | grep FTBServer.jar | grep -v -q grep ; then

其他一些注意事项:

  • 使用数组作为 Bash 参数。
  • 使用变量时请用引号引起来。
  • 使用[[而不是[
  • if线路校正如上图。

因此,更正确的版本应该是:

JAVA=(java -Xms512M -Xmx3072M -XX:PermSize=128m -jar FTBServer.jar nogui)
DIR="/home/jon/FTB/FTBnew"

if [[ "$1" == start ]]; then
    if ps -ef | grep FTBServer.jar | grep -v -q grep; then
        echo "Minecraft is already running"
    else
        echo "Starting!"
        cd "$DIR" &&
        screen -dmS minecraft "${JAVA[@]}"
        sleep 7
        if ps -ef | grep FTBServer.jar | grep -v -q grep; then
            echo "Minecraft server started successfully"
        else
            echo "Minecraft server failed to start"
        fi
    fi
fi

相关内容