Por que a tela aparentemente não faz nada com os comandos passados com -X?

7

Eu tenho tentado configurar um sistema de backup automático para um servidor de minecraft, e estou tendo problemas com a tela, especificamente ao usar 'screen -r sessionname -X "/ var / minecraft / somebatchfile"', nada acontece.

Meu fluxo de processo é mais ou menos assim no momento:

screen -m -d -S minecraft /var/minecraft/bin/server_nogui.sh

Isso inicia o servidor de minecraft sem nenhum problema. No entanto, a questão é que até mesmo acompanhamentos simples como esse falham:

screen -r minecraft -X "stop"

Não recebo nenhuma mensagem de erro ou mensagem de sucesso, e o servidor não desconecta clientes e encerra, como deveria. Eu suponho que estou fazendo algo errado, mas não sei o que. Existe algum erro óbvio que estou cometendo? Eu li a página de manual um pouco, mas não estou tendo sorte para descobrir por mim mesmo.

    
por Sukasa 14.01.2011 / 11:01

2 respostas

6

Você tem que dar o parâmetro -X a screen comando, eu acho que você quer "stuff" um comando minecraft-server para a sessão screen .

screen -r minecraft -p 0 -X stuff "stop $(printf '\r')"

O printf envia um retorno de carro, então o comando "stop" é executado. -p 0 garante que os caracteres sejam enviados para a janela de tela inicial.

Para enviá-lo por ssh você tem que colocar o comando em " " (você também pode usar ' ' , mas isso não permitiria a substituição do comando).

ssh -t -i ~/.ssh/id_dsa server_user@server_address "screen -r minecraft -X stuff "even other_server_name is getting in on the action\! $(echo -ne '\r')""

Cuidado que ! é uma palavra reservada, você tem que escapar dela.

Também é possível para incluir uma nova linha gerada pelo usuário no comando para executá-lo:

ssh -t -i ~/.ssh/id_dsa server_user@server_address "screen -r minecraft -X stuff 'even other_server_name is getting in on the action!
'"

Escapar de ! não é necessário aqui.

    
por 14.01.2011 / 11:22
1

Como descobrimos em essa pergunta semelhante , a tela apresenta problemas no envio de chaves para sessões que nunca foram anexadas . Se você já anexou, o painel de janela padrão é definido como zero, caso contrário, ele falhará silenciosamente porque as teclas não estão indo para uma janela. Você pode evitar isso adicionando um argumento -p 0 para o seu comando de tela.

Alternativamente, você pode usar o que funciona muito melhor tmux em vez disso :

tmux new-session -d -n minecraft /var/minecraft/bin/server_nogui.sh

Em seguida, envie ao servidor minecraft o comando stop assim:

tmux send-keys -t minecraft "stop^M"

Note que a sequência ^ M acima é uma representação visual de uma entrada real. Você pode gerar isto no comando como pressionando Ctrl + v Enter . Isso é mais fácil do que enviar o retorno de carro usando a instrução echo em resposta do wag .

    
por 28.05.2011 / 16:44