Processo de tela aberta no terminal do script

1

Eu tenho um servidor de minecraft em execução na tela e, no momento, é apenas um script que inicia o java assim:

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

Basicamente, isso inicia o minecraft em um contêiner de tela em segundo plano, e eu posso acessá-lo com screen -r mc por meio do SSH. No entanto, o que eu gostaria de fazer é ter o processo sempre no monitor do servidor e também acessível por ssh com screen -x mc . Além disso, tenho um script restart.sh que preenche o comando stop para o processo mc a cada duas horas e, em seguida, executa o script start.sh. O servidor está no nível de execução 3, então não acho que gnome-terminal -e "screen -x mc" funcionará. Além disso, parece que o script de reinicialização está iniciando o mc fora da tela. Quando eu SSH no servidor, screen -ls não aparece nada, mas o processo do servidor de minecraft está em execução e posso me conectar a ele. Aqui está o script:

#!/bin/sh

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

Alguma idéia?

    
por InventiousTech 23.09.2013 / 22:43

1 resposta

1

Existem quatro partes para isso.

  1. GNU screen
  2. um script para iniciar o minecraft e reiniciá-lo se ele morrer (por exemplo, chamar esse start-minecraft.sh )
  3. um script de inicialização para executar o script start-minecraft.sh dentro da tela. Ele deve usar su ou sudo para executar start-minecraft.sh sob o uid que possuirá a sessão de tela e o processo do servidor de minecraft. Isso pode ser executado, por exemplo, em / etc / inittab ou /etc/rc.local.
  4. um trabalho cron para matar o servidor de minecraft a cada duas horas.

start-minecraft.sh deve ser um simples invólucro de loop infinito em torno do minecraft, talvez com um breve intervalo entre as reinicializações do mc. Uma versão minimalista do script seria algo assim:

#! /bin/sh

# set PATH and other env variables here, if required
# ...

while true; do
   java -Xincgc -Xms1024M -jar craftbukkit-1.6.4-b2882.jar
   sleep 30
done

Para executar esse script dentro de screen , uma maneira de fazer isso é assim:

screen -d -RR minecraft -t minecraft /path/to/start-minecraft.sh

Isso diz a screen para anexar a uma sessão de tela existente chamada "minecraft", se existir, ou criar uma nova com esse nome, e criar uma única guia dentro da tela com o título "minecraft" e execute o script start-minecraft.sh dentro disso.

Se a tela de execução do usuário tiver um arquivo ~/.screenrc , talvez você também queira substituí-lo com um arquivo de configuração ou um personalizado usando a opção -c da tela - por exemplo, screen -c /dev/null ...

O que nos leva à segunda maneira de iniciar a tela. Crie um arquivo .screenrc personalizado para minecraft que inclua as duas linhas a seguir:

screen -t bash  1 bash
screen -t minecraft  0 /path/to/start-minecraft.sh 

Isto irá criar duas "janelas" dentro da tela, uma executando bash, a outra executando minecraft. Ele inicia minecraft por último e na janela 0, então será o primeiro mostrado quando você se conectar a ele.

Qualquer método usado para iniciar a tela, você pode anexar manualmente a esta sessão de tela mais tarde (por exemplo, do seu terminal ou por uma conexão ssh) com screen -d -RR minecraft .

O último método (custom ~ / .screenrc) é o preferido. Se o start-minecraft.sh morrer (por exemplo, porque você o matou para colocar temporariamente o servidor de minecraft), você pode reiniciá-lo apenas criando uma nova "janela" em screen e executando start-minecraft.sh manualmente.

    
por 24.09.2013 / 02:20