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

时间:2013-09-23 14:43:08

标签: java minecraft gnu-screen

我有一个在屏幕上运行的Minecraft服务器,而现在,它只是一个像这样启动java的脚本:

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

基本上这只是在后台的屏幕容器中启动我的云,我可以通过SSH使用screen -r mc访问它。但是,我想要做的是,始终在服务器监视器上启动该进程,并且还可以通过带有screen -x mc的ssh访问该进程。另外,我有一个restart.sh脚本,它每两小时将stop命令填充到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

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

screen -dmS mc command

启动一个屏幕,该屏幕仅存在于< 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,所以我将使用“read”工具作为示例:

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下启动并正在读取标准输入的应用程序。