启用 tmux 分离的非交互式会话来运行 stty,而不会出现“输入/输出错误”

启用 tmux 分离的非交互式会话来运行 stty,而不会出现“输入/输出错误”

我尝试在运行 Amazon Linux 的 AWS EC2 实例启动时启动 MineCraft 服务器。

为了方便起见,我曾经tmux启动一个分离的会话,这样我就可以ssh进入盒子并连接到正在运行的会话,然后再次分离并关闭我的终端,而无需关闭服务器。我正在使用 EC2 实例“用户数据”来运行使用以下命令的启动脚本:

tmux new-session -d -s server ./start-server.sh

现在,虽然我可以交互地运行此命令,但当服务器在没有附加 tty 的情况下以非交互方式启动时,minecraft 服务器 .jar 会成功运行,但显然一些启动代码会检查 tty 属性,因为服务器在推送以下错误后停止到日志:

java.io.IOError: java.io.IOException: Error executing 'stty -a': stty: standard input: Input/output error
      at org.jline.terminal.impl.AbstractPosixTerminal.setAttributes(AbstractPosixTerminal.java:54)
      ...

在 Minecraft 服务器的上下文中搜索此错误时,我无法找到任何有意义的帮助,虽然可能需要对启动服务器的“正确”方式进行更多研究,但我希望有一个快速的捷径。

stty -a即使会话在技术上当时没有附加 TTY(因为稍后,当我使用 tmux 附加到会话时它可以有一个 TTY),是否有某种方法可以让运行没有错误?我可以给 tmux 一些开关,或者伪造 shell (bash) 以使其认为附加了 tty,或者替换stty为使用附加开关运行的脚本stty,或者其他什么?

我是否错误地考虑了启用 SSH 进入盒子以与正在运行的 Minecraft 进程进行命令行交互的最佳方法?使用 tmux 是一个不好的方法吗?

相关内容