Iniciar um comando em uma nova sessão de tela não funciona

Iniciar um comando em uma nova sessão de tela não funciona

Quero executar um comando em uma nova sessão de tela (e desconectar dela), mas não consigo fazê-lo funcionar. Tentei iniciar um processo em uma nova sessão de tela e me desconectar dele com isto:

screen -d -m mycommmand

Mas quando tento me conectar a essa sessão de tela com

screen -r

Recebo a mensagem "Não há tela para ser retomada". Também tentei iniciar um comando em uma nova sessão de tela com

screen mycommand

Quando faço isso, uma nova sessão de tela é iniciada, mas o comando não é executado.

O comando é um script .sh que inicia um servidor de jogo, mas o servidor de jogo não inicia.

[Editar] Como algumas pessoas pediram o comando exato, aqui está: É um script bash que deve iniciar um servidor minecraft em uma sessão de tela separada.

./startServer.sh

Aqui está o script .sh:

cd "/home/tim/minecraft/survivalServer"
screen -S "minecraft-server-1-14-4" -m -d /home/tim/java/bin/java -Xmx4096M -Xms1024M -jar /home/tim/minecraft/survivalServer/minecraft_server.1.14.4.jar nogui

Agora, o problema é que quando executo o script ele não consegue criar a nova sessão de tela. Por que é que?

A ajuda é muito apreciada. Obrigado

Responder1

O problema é que você está tentando iniciar uma instância de tela desanexada e aninhada dentro de uma instância de tela desanexada. Seu script contém a linha:

screen -S "minecraft-server-1-14-4" -m -d /home/tim/java/bin/java -Xmx4096M -Xms1024M -jar /home/tim/minecraft/survivalServer/minecraft_server.1.14.4.jar nogui

Isso inicia a tela, nomeia a sessão da tela minecraft-server-1-14-4, inicia o Minecraft e desconecta. Mas você também está tentando executar o screen -d -m ./startserver.sh. Portanto, antes da sessão de tela ser criada no script, você já está executando o script dentro de uma sessão de tela desanexada. Isso... não costuma funcionar tão bem.

É funcionalmente igual a isto:

wolferz@khaos ~ $ screen -m -d screen -S 'mysession' -m -d top
wolferz@khaos ~ $ screen -r
There is a screen on:
        24850.mysession (07/24/2019 10:47:46 PM)        (Dead ???)
Remove dead screens with 'screen -wipe'.
There is no screen to be resumed.

O que você deseja fazer é executar o script diretamente. Apenas faça ./startserver.sh. Isso deve levá-lo de volta ao prompt. Você pode então conectar-se ao seu console do Minecraft fazendo screen -rnormalmente.

informação relacionada