【问题标题】:Bash script send enter key or prevent cat hangBash 脚本发送回车键或防止猫挂起
【发布时间】:2012-05-28 02:31:04
【问题描述】:

我目前正在使用此命令在屏幕会话中运行 Minecraft 服务器:

(tail -f /path/to/fifo & cat) | java -Xmx2048M -jar minecraft_server.jar nogui

您可以通过在服务器控制台中发送“停止”来关闭我的世​​界服务器。我正在使用 fifo 发送来自其他 bash 脚本的命令,并使用 cat 来允许来自屏幕会话中实际 Minecraft 服务器控制台的输入。

但是,如果您在实际的 Minecraft 控制台中输入命令“停止”,服务器最终会因为“cat”命令而在它应该退出之前挂起。解决这个问题的唯一方法是在发送停止命令后再次按 Enter。

我怎样才能让“猫”不导致它挂起?

编辑:完整的脚本。

#!/bin/bash

serverDirectory=/opt/games/minecraft
pidFile=$serverDirectory/server.pid
fifoFile=$serverDirectory/server.fifo

cleanup() {
    rm -f $pidFile
    rm -f $fifoFile
}

if [ ! -p $fifoFile ]; then
    mkfifo $fifoFile && chmod 0777 $fifoFile
fi

echo $$ > $pidFile

# restart server if it stops
while true
do
    # how minecraft server should handle an interruption
    trap "{ echo 'stop' > $fifoFile ; }" SIGINT
    (tail -f $fifoFile & cat) | java -Xmx2048M -jar minecraft_server.jar nogui
    echo "Restarting server...."
    # if interruption occurs before we restart, stop trying to restart and clean up
    trap "{ cleanup ; exit 0 ; }" SIGINT SIGTERM
    sleep 5
done

【问题讨论】:

    标签: bash cat


    【解决方案1】:

    我没有使用过我的世界服务器,所以我不知道我是否走在正确的轨道上,但这行得通吗?

    #!/bin/sh
    
    fifo="/path/to/fifo"
    mkfifo $fifo
    trap "rm -f $fifo" 0 1 2 3 6 15
    
    /path/to/java -Xmx2048M -jar minecraft_server.jar nogui < $fifo &
    echo $? > /path/to/minecraft.pid
    cat > $fifo
    

    一旦服务器退出,这仍然不会杀死cat,但至少它不会阻塞服务器。您可能希望在退出时杀死猫的函数中启动我的世界服务器。我建议保留 .pid 文件以备将来使用。 :-)

    【讨论】:

    • 谢谢。我可能会将脚本切换到将 java 进程置于后台。我的问题是 Minecraft 服务器实际上从未因为猫而退出。没有猫,它会很好地退出。我可以告诉这一点,因为每当服务器退出时都应该有一些输出,例如“重新启动”,而 cat 不会发生这种情况。我已经使用我正在使用的完整实际脚本编辑了原始帖子。当我把它改成你的方式时,同样的事情发生了。
    • 我认为您的脚本的目标是维护将命令输入 minecraft-server 标准输入的 两种 方式,因此我只是尝试使用不同的方法来实现。我怀疑如果“发生了同样的事情”,那么实际上发生了其他看起来一样的事情。 :) minecraft-server.jar 是否无法退出,或者是包装脚本没有退出,因为没有什么可以杀死cat?
    • 哇哦。我明白你现在在问什么(不确定是因为你的措辞还是因为我从那以后就睡了)。很抱歉没有早点看到这个。事实上,因为没有什么可以杀死猫。如果我在后台运行 java 进程,那么检查服务器是否仍在运行的最佳方法是什么?当服务器 pid 存在时,将“cat > $fifo”部分放入循环中?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-04-05
    • 1970-01-01
    • 2013-09-28
    • 1970-01-01
    • 2014-03-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多