连接到带有 golang 的屏幕会话时出现问题 - 内部存储库



我正在研究MSCT,这是一个供个人使用的小型Minecraft服务器管理实用程序(目前(。我在屏幕会话中启动服务器,它工作正常。我只是没有运气让屏幕开始连接或让 MSCT 恢复屏幕。

回购在这里:https://github.com/nathanpaulyoung/msct/blob/master/msct.go

第 48 行的相关功能是:

resumeCommand()

这里有一个片段:

func resumeCommand() cli.Command {
    command := cli.Command{
        Name:    "resume",
        Aliases: []string{"r"},
        Usage:   "resume a server's screen session",
        Action: func(c *cli.Context) {
            servername := c.Args().First()
            screenname := buildScreenName(servername)
            args := []string{"-x", screenname}
            cmd := exec.Command("screen", args...)
            if serverExists(servername) {
                output, _ := cmd.Output()
                println(output)
            } else {
                println("No server known by the name "" + servername + "". Either server.jar is missing or the server directory was not configured before compilation.")
                os.Exit(999)
            }
        },
    }
    return command
}

我觉得这一定是我根本不知道的事情,比如某种特殊的方式来调用新的tty或其他东西。如果你们中的任何人知道该解决方案,请提供建议或拉取请求。

也就是说,我一直在更多地考虑这里的真正目标,并认为我会提到这一点,以防产生一个同样令人满意的解决方案,如果不是我所期望的。我希望 Minecraft 服务器继续运行,即使我没有主动查看服务器控制台。无论这意味着当我当前没有 ssh 进入它正在运行的盒子时,还是(在屏幕的情况下(实际上没有连接到屏幕会话,它都应该在没有我眼睛的情况下继续运行。如果有一种方法可以使用 https://golang.org/x/crypto/ssh/terminal 将屏幕内容管道到自定义 golang 终端会话中,或者有一种方法可以创建类似于 Minecraft 服务器可以运行的屏幕的东西,这些将同样令人满意。

您需要创建一个屏幕分离并执行文件而不附加屏幕会话。

为此,您必须使用screen -dmS <screenName> <command>

您还需要将cmd.Output()更改为cmd.Start(),因为使用第二个,您无需等待命令结束(在屏幕情况下,执行可能是无限的(

检查这个:使用 golang 在屏幕 (linux( 中启动程序

最新更新