Java 从脚本在终端中打开屏幕进程

Java 从脚本在终端中打开屏幕进程,java,minecraft,gnu-screen,Java,Minecraft,Gnu Screen,我在屏幕上运行了一个minecraft服务器,现在,它只是一个启动java的脚本,如下所示: screen-dmS mc java-Xincgc-Xms1024M-jar-bukkit-1.6.4-b2882.jar 基本上,这只是在后台的屏幕容器中启动minecraft,我可以通过SSH使用screen-rmc访问它。但是,我想做的是让进程始终在服务器监视器上运行,并且也可以通过ssh通过screen-xmc访问。另外,我还有一个restart.sh脚本,它每两小时将stop命令填充到mc进程

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

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

基本上,这只是在后台的屏幕容器中启动minecraft,我可以通过SSH使用
screen-rmc
访问它。但是,我想做的是让进程始终在服务器监视器上运行,并且也可以通过ssh通过
screen-xmc
访问。另外,我还有一个restart.sh脚本,它每两小时将stop命令填充到mc进程,然后它执行start.sh脚本。服务器处于运行级别3,因此我认为
gnome terminal-e“screen-xmc”
无法工作。此外,重启脚本似乎正在屏幕外启动mc。当我用SSH连接到服务器时,
screen-ls
没有显示任何内容,但是minecraft服务器进程正在运行,我可以连接到它。以下是脚本:

#!/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
有什么想法吗

screen -dmS mc command
启动一个屏幕,该屏幕将一直持续到完成,
e、 g.每当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

正如您所见,stuff不会将输入发送到bash中,而只是一般地发送到屏幕中,例如,发送到在bash下启动并正在读取stdin的任何应用程序中。

这似乎是一个可行的选项,但恐怕我不完全理解重启位。如何停止cron作业中的服务器?看来我的任何命令都会被bash,而不是minecraft。实际上,我正在将stop命令从cron脚本填充到mc进程。你能澄清一下吗?我已经更新了原始答案,在一分钟内添加了一个测试样本。