Mostra a saída de um comando executado dentro da tela se sair com erros

1

Estou usando o comando screen para iniciar o servidor em execução em primeiro plano. Mas no caso de haver um erro ao iniciar o servidor, não consigo ver a saída do comando. Eu tenho que executá-lo novamente sem screen .

foo@ubuntu:~/server/application$ screen -S server ruby start.rb true 3001
[screen is terminating]
foo@ubuntu:~/server/application$

Eu gostaria de ver a saída STDERR / STDOUT na tela, mesmo quando usar screen , mesmo se o comando filtrado falhar. Existe alguma maneira de fazer isso?

    
por Dolphin 08.05.2015 / 13:18

2 respostas

1

Ah sim. Quando você inicia e para screen , ele redefine a exibição da tela, limpando-a no processo. A maneira mais fácil de garantir que você possa ver erros gerados pelo comando ruby é separá-lo do comando screen , de modo que um não seja mais dependente do outro:

screen -S server
ruby start.rb true 3001
...
exit

Você presumivelmente já sabe que Ctrl A d irá desanexar a tela, e mais tarde você pode reconectar esta sessão nomeada com screen -r server .

Erros que podem ser gerados pelo comando ruby permanecerão disponíveis para leitura. Mesmo que o comando saia, a sessão screen continuará funcionando, por isso é importante lembrar de reconectar e exit quando terminar.

    
por 08.05.2015 / 14:34
1

Como você vai saber que o servidor foi iniciado com sucesso e não está prestes a morrer com uma mensagem de erro?

Se você quiser mostrar a sessão da tela até ser explicitamente morto, é fácil. Execute um comando que não termine após o comando ruby , por exemplo, para executar um shell:

screen -S server sh -c 'ruby start.rb true 3001; echo "Server terminated with status $?"; exec bash'

ou para sair depois de um tempo limite

screen -S server sh -c 'ruby start.rb true 3001; echo "Server terminated with status $?"; sleep 3600'

Se você quiser desanexar após um tempo limite, mesmo que o servidor continue em execução:

screen -S server sh -c '
  ruby start.rb true 3001 &
  server_pid=$!
  sleep 2
  if [ -z "$(ps -o pid= -p "$server_pid")" ]; then
    wait
    echo "Server terminated with status $?"
    exec bash
  fi
'
    
por 09.05.2015 / 02:05