sábado, 12 de outubro de 2013

Trabalho remoto com Linux - Screen

Os sistemas baseados em Linux oferecem diversas facilidades para a criação de sessões remotas. Uma das grandes vantagens do trabalho remoto é a possibilidade de utilizar (e dividir com vários usuários) computadores com alto poder de processamento. Isto é especialmente importante na academia, pois frequentemente precisamos executar experimentos ou simulações demoradas e que demandam grande poder computacional. Neste post irei apresentar o básico sobre o screen, uma ferramenta do Linux que permite que um usuário deixe um programa rodando em uma máquina mesmo sem estar logado nela.

Primeiramente, logue por ssh em uma máquina remota de sua escolha e execute no terminal:

$> screen

O comando screen cria um novo terminal que pode ser desvinculado da sua sessão ssh. Ou seja, a sessão do screen continua aberta mesmo que você se desconecte ou que a conexão caia. Para demonstrar esta capacidade, digite o seguinte comando no terminal.

$> sleep 120; echo "Terminou"

Este comando imprimirá na tela "Terminou" após 2 minutos. Agora pressione as seguintes teclas.

(Ctrl + A) e em seguida D

Seu terminal do screen foi minimizado e você está de volta à sua sessão ssh usual. Só para deixar o exemplo mais real, se desconecte da máquina e conecte novamente.

Ao reconectar na máquina remota, precisamos indicar que desejamos retomar nossa sessão do screen. Para fazer isto use o seguinte comando:

$> screen -r

Agora estamos de volta ao terminal que abrimos anteriormente e o texto "Terminou" deverá estar escrito na tela. Note que toda vez que executamos o comando screen sem parâmetros será aberta uma nova sessão. Pessoalmente, costumo usar somente uma sessão por máquina. Podemos listar as sessões do screen usando o comando

$> screen -ls

e restaurar uma sessão específica usando

$> screen -r NOME_DO_SCREEN

Assim como uma janela do konsole ou gnome-terminal pode conter várias abas, uma sessão do screen também pode abrigar diversos terminais diferentes. Somente um terminal fica visível, mas todos estão sendo executados em paralelo. Para criar um novo terminal em seu screen aperte

(Ctrl + A) e em seguida C

Para ver quais terminais estão abertos em sua sessão use

(Ctrl + A) e em seguida W

O terminal com uma * ao lado do nome é o que está visível atualmente. Para navegar entre os terminais use

(Ctrl + A) e em seguida N

para ir para o próximo (Next) terminal e

(Ctrl + A) e em seguida P

para ir para o terminal anterior (Previous).

Estes são os principais comandos do screen para a execução de programas demorados em máquinas remotas. Deixe um comentário para qualquer dúvida ou esclarecimento. Sugestões também são benvindas.

Veja também:
Como imprimir em máquinas remotas.