Iniciar uma sessão de tela e executar um script sem anexá-lo?

0

Estou tentando escrever um script para:

  1. Iniciar uma nova screen sessão
  2. Executar algum programa ou script nessa nova sessão de tela
  3. Desanexe da sessão de tela, enquanto o programa da etapa 2 ainda pode estar sendo executado lá. Se o programa do passo 2 terminar, imediatamente ou mais tarde, a sessão de tela deve permanecer em execução (desanexada).

Eu tenho tentado todos os tipos de combinações com screen -X program ou screen -S somename seguido por program seguido por screen -D , combinando com -d ou -m opções que encontro em perguntas e respostas relacionadas, mas nada funciona.

O mais próximo que consegui foi o seguinte:

screen -S MySessionName -d -m myprogram

Isso inicia uma nova sessão de tela no background, executando myprogram . Exceto assim que myprogram terminar (algumas vezes instantaneamente) a sessão de tela termina, enquanto eu quero mantê-la em execução.

    
por RocketNuts 04.12.2017 / 13:38

1 resposta

3

Método 1

Eu criei uma configuração de demonstração que você descreveu aqui na minha máquina. Eu também enfrentei o problema que você relatou. Mas adicionar uma pequena linha de script resolveu meu problema.

Eu adicionei a seguinte linha no final de myprogram

exec $SHELL

Após o término do seu script, o processo de Bash se substituirá por uma nova invocação de si mesmo.

Método 2

Ou você pode tentar o seguinte método no qual iniciamos um detached screen primeiro e enviar o comando para essa tela usando stuff

Para isso, primeiro você precisa iniciar uma tela separada.

screen -dmS MySessionName

Em seguida, envie o script para essa tela.

screen -S MySessionName -p 0 -X stuff 'myprogram\n'

Isso também funcionou para mim.

    
por Rooney 04.12.2017 / 19:24