Como impedir que a tela termine quando o processo terminar [duplicado]

4

Estou lançando um processo em uma tela nomeada como:

screen -dmS myscreen bash -c "export VAR=123; cd /usr/local/myproject; ./myscript.py"

No entanto, depois de alguns minutos, meu script falha e quando sai, a tela é encerrada, por isso não consigo ver a saída de depuração. Meu script é executado por tempo suficiente para que eu possa anexar manualmente à tela, mas a tela ainda termina automaticamente me chutando para fora dela.

Como faço para impedir que a tela seja encerrada quando o processo que está sendo executado parar?

    
por Cerin 28.09.2014 / 07:27

2 respostas

5

Você pode canalizar a saída para less ou um arquivo com tee e, em seguida, para less ou apenas adicionar um comando "pause" como sleep 99999 após o comando.

screen -dmS myscreen bash -c "export VAR=123; cd /usr/local/myproject; ./myscript.py; sleep 9999"

Em qualquer caso, recomendo alternar de screen para tmux e você pode usar esta pergunta para saber como executar um comando e deixá-lo depois de sair.

basicamente você pode adicionar bash -i ao final do seu comando.

tmux start-server  
tmux new-session -d
tmux new-window 'ls;bash -i'

ou você pode usar o esta opção remain-on-exit

set-remain-on-exit [on | off]

When this option is true, windows in which the running program has exited do not close, instead remaining open but inactivate.

    
por 28.09.2014 / 09:19
1

Por padrão, screen sai quando o comando em execução é fechado, como você observou. Quando você inicia screen sozinho, o comando que ele executa é um shell interativo, que obviamente não sai quando seus filhos o fazem.

Se você quiser conseguir algo assim de outro script, você pode fazer

screen -dm -S myscreen
screen -S myscreen -X stuff "export VAR=123; cd /usr/local/myproject^M"
screen -S myscreen -X stuff "./myscript.py && exit^M"

Isso primeiro inicia uma nova tela que terá um shell de login em execução e não será fechado até que o shell de login seja encerrado. Em seguida, você usa o comando screen stuff para inserir texto nesse shell. Na primeira linha, definimos as variáveis e mudamos de diretório. Na segunda linha, iniciamos o script e, em seguida, saímos do shell (assumindo aqui que você deseja fechar a sessão de tela se o script for bem-sucedido). No entanto, devido ao curto-circuito e ( && ), se myscript.py falhar, o exit nunca acontecerá e você estará livre para se reconectar à sessão de tela e ver o que aconteceu.

Observe que para inserir o ^M corretamente, você precisa digitar ^V (control-v) seguido por ^M (que é o mesmo que a sua chave de entrada).

    
por 31.07.2015 / 21:45