sexta-feira, 4 de setembro de 2009

Usando o comando screen em conexões remotas

Pessoal, desculpe o sumiço do blog, mas ultimamente minhas atividades andam excessivamente intensas e mal tou tendo tempo para criar as postagens de sempre. Em vista disso, não vou garantir mais para vocês um cronograma fixo de mensagens, mas vou postando assim que algo interessante for surgindo. É a única maneira que achei de manter a qualidade dos posts e ao mesmo tempo trazer coisas interessantes para o blog. Hoje mesmo, estou trazendo pra vcs um recurso muito útil, que descobri há pouco mais que 6 meses. Espero que gostem do post.

Usando o comando screen em conexões remotas

Sinceramente, sempre tive um problema com terminais remotos: Sempre que começava a fazer um download no terminal aberto no ssh/putty, algum engraçadinho ia lá e resetava o rádio ... O que aconteceia ?? Eu perdia meu download pq o terminal fechou e matou todos os processos filhos dele. Ou seja, de novo ao download ... Mas hoje eu descobri um comando que até agora é o mais melhor de bom de todos que já descobri para o Linux. Chama-se Screen.

Em uma seção de terminal comum do linux, os programas/comandos/processos somente ficam em execução enquanto a sessão de terminal está aberta mas, no momento que o terminal é fechado, por qualquer razão, todos os processos filhos desse terminal são solenemente terminados.

Isso não é algo com que devemos nos preocupar quando estamos com nosso terminal aberto em nossa máquina, mas isso começa a fazer grande diferença quando estamos, por exemplo, conectados via ssh com nosso host e as intempéries da conexão remota nos desconecta justamente naquela hora que não deveria ter sido desconectada. E como falei antes, não importa o motivo que encerrou a sessão de terminal, o que vc estiver fazendo será encerrado.

Nessa hora, não seria bom se tivéssemos uma forma que pudéssemos continuar fazendo as atividades no terminal, do ponto onde paramos? Eh o screen...



Eu falo isso como se fosse a última descoberta do século, não é mesmo? Não é, isso já existe há bastante tempo, mas só agora que eu descobri o quanto isso pode me ser útil.

Bom, vamos deixar de rasgar seda e vamos falar mais do comando.

Primeiramente, no terminal, digite o comando screen:

Inicialmente parece não acontecer nada, mas na verdade o que aconteceu foi que vc iniciou uma sessão no screen e dentro dessa sessão lhe foi fornecido um terminal. Até o momento, não há nada de mais. Vamos então, fazer um teste. Comece a baixar um arquivo grande via wget e em seguida feche o terminal. É de se esperar que o wget termine junto com o terminal, não é mesmo?

Agora, abra um novo terminal e digite novamente o comando screen, com um parâmetro -r (screen -r). Vc vai ver que sua sessão anterior ainda está rodando. O que acontece é que o screen consegue manter sua sessão entre conexões diferentes.

Isso é muito útil quando você está em uma conexão ssh pq vc não precisa se preocupar mais com a estabilidade da conexão remota. Simplesmente, se a conexão cair, vc retoma a conexão ssh e executa novamente o screen e volta a trabalhar do ponto que você tinha parado. Você também pode sair da sessão utilizando o comando + D, que sai do screen mas mantém em background a sessão aberta.

Outra coisa útil do comando screen é poder utilizar várias sessões de terminal diferentes. Normalmente, se você quizesse utilizar mais de um terminal remoto, você era obrigado a abrir várias conexões SSH, o que acaba não sendo muito prático. Com o screen, vc pode criar sessões novas e alternar entre elas de maneira fácil. Os comandos para isso são:

[Ctrl+A] C - Abre um novo terminal.
[Ctrl+A] P - Vai para o terminal anterior.
[Ctrl+A] N - Vai para o próximo terminal.

Há outros comandos, que permitem vc listar as sessões abertas, as screens abertas, se conectar a um grupo de sessões abertas anteriormente, entre outras coisas.

Meu uso principal para o screen é com o irssi, pq muitas vezes tou acessando o IRC do trabalho via conexão ssh para meu computador em ksa ou mesmo fazendo algum download por lá (o que é bastante comum).

Emfim, exagerando eu diria que o céu não é o limite e sim a sua imaginação pois com a quantidade de possibilidades que o screen oferece somente alguém muito inocente para não perceber a sua utilidade. Não esqueça de visitar a man page e o google, pq as opções do screen são muito grandes, com opções de personalização que permitem deixar o seu screen na medida das suas necessidades.

Fontes:
GNU Screen
Usando o comando Screen
man screen