【问题标题】:open screen process in terminal from script从脚本在终端中打开屏幕进程
【发布时间】:2018-11-02 23:31:43
【问题描述】:

我有一个在屏幕上运行的我的世界服务器,现在,它只是一个启动 java 的脚本,如下所示:

screen -dmS mc java -Xincgc -Xms1024M -jar craftbukkit-1.6.4-b2882.jar

基本上这只是在后台的屏幕容器中启动我的世界,我可以通过 SSH 使用screen -r mc 访问它。但是,我想做的是让进程始终在服务器监视器上运行,并且还可以通过 ssh 使用screen -x mc 访问。另外,我有一个 restart.sh 脚本,它每两个小时将停止命令填充到 mc 进程,然后它执行 start.sh 脚本。服务器处于运行级别 3,所以我认为 gnome-terminal -e "screen -x mc" 不会工作。此外,似乎重新启动脚本正在屏幕外启动 mc。当我通过 SSH 连接到服务器时,screen -ls 什么也没有出现,但我的世界服务器进程正在运行,我可以连接到它。这是脚本:

#!/bin/sh

screen -x mc
screen -s mc stuff "say Server Restarting in 15 minutes."
screen -s mc -X eval "stuff \015"
sleep 600
screen -x mc
screen -x mc -X stuff "say Server restarting in 5 minutes."
screen -s mc -X eval "stuff \015"
sleep 240
screen -x mc
screen -s mc -X stuff "say Server restarting in 1 minute."
screen -s mc -X eval "stuff \015"
sleep 60
screen -S mc -X stuff "say Server restarting."
screen -S mc -X eval "stuff \015"
screen -S -X stuff "kickall Server Restarting, it should be back up in about a minute."
screen -S mc -X eval "stuff \015"
sleep 2
screen -S mc -X stuff "stop"
screen -S mc -X eval "stuff \015"
sleep 30
screen -wipe
sleep 3
cd /minecraft/server/craftbukkit
./start.sh

有什么想法吗?

【问题讨论】:

    标签: java minecraft gnu-screen


    【解决方案1】:
    screen -dmS mc command
    

    启动一个屏幕,它只存在到 完成,
    例如每当 java 退出时 - 屏幕也会终止。

    改为这样的开始屏幕:

    screen -dmS mc bash
    screen -s mc -X eval 'stuff "java -Xincgc -Xms1024M -jar craftbukkit-1.6.4-b2882.jar\015"'
    

    也相应重启:

    screen -s mc -X eval 'stuff "cd /minecraft/server/craftbukkit\015"'
    screen -s mc -X eval 'stuff "./start.sh\015"'
    

    希望这会有所帮助:)

    我这里没有java/minecraft,所以我将使用“读取”工具作为示例:

    screen -dmS mc bash                             # starts screen&bash
    screen -s mc -X eval 'stuff "read\015"'         # tells bash to start "read"
    screen -s mc -X eval 'stuff "test\015"'         # tells read the input "test"
    screen -s mc -X eval 'stuff "echo \$REPLY\015"' # tells bash to echo the $REPLY var
    screen -s mc -X eval 'stuff "cd /tmp\015"'      # tells bash to cd into /tmp
    

    如您所见 - 东西不是将输入发送到 bash,而是通常 - 到屏幕中,例如进入任何在 bash 下启动并正在读取标准输入的应用程序。

    【讨论】:

    • 这似乎是一个可行的选择,但恐怕我不完全理解重启位。我将如何停止服务器的 cron 作业?似乎我输入的任何命令都将用于 bash,而不是 minecraft。实际上,我将停止命令从 cron 脚本填充到 mc 进程。你能澄清一下吗?
    • 我已经更新了原始答案,一分钟内添加了一个测试样本。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-14
    • 1970-01-01
    • 1970-01-01
    • 2020-08-28
    • 2020-01-16
    • 1970-01-01
    相关资源
    最近更新 更多