sexta-feira, 28 de outubro de 2011

man screen

Você conhece o comando screen?

Este artigo assume que o leitor possui um cérebro com uma capacidade cognitiva de associação, ao menos, básica

O comando screen pra quem não conhece é uma ferramenta que permite que você crie terminais que sejam persistentes, ou seja, que não sejam encerrados no logout.

Esse tipo de ferramenta é muito útil quando você precisa executar tarefas em uma maquina remotamente (via ssh por exemplo) e essas tarefas levem muito tempo para serem executadas ou simplesmente deixam o terminal travado para sempre. Comandos como dumps de bancos de dados grandes (grandes de verdade, não esse seu ai), importação de bancos de dados, gunicorn [1], ou algum comando customizado que você criou para o seu projeto Django pra processar alguns milhões de registros.

Nesses casos, você certamente já teve problemas com o terminal que morreu e o processo foi junto por ter perdido seu pai, ai você tentou apelar pra comandos em background, nohup e toda sorte de bruxaria que aparentasse resolver seu problema. Ai sua conexão morria e você invocava os antigos espíritos do mal para que protegessem seu processo.

Sem mais prolixidade lhe apresento: screen

Seu funcionamento é absurdamente simples, basta digitar:
screen -S daora
E um novo shell lhe será magicamente aberto, esse novo shell é um pouco diferente do que você tinha anteriormente, aqui, seu mouse é um mero peso de mousepad, não tente usa-lo pra nada que não seja selecionar texto pra copiar/colar.

Antes que você se desespere porque não consegue mais rolar o texto pra cima ou deixar esse terminal ai enquanto vai tomar um suco de café, vamos ao funcionamento da bagaça

O screen, assim como vim e emacs é baseado em comandos para funcionar, os comando mais basico de todos é: C-a d.

Mas você nunca usou vim nem emacs mesmo, hein?! Ta loks…

Vamos la, quando você ler em qualquer documentação sobre comandos na internet e se deparar com um C-a, isso significa que você deve apertar ao mesmo tempo ctrl+a, e se estiver C-a d, então você deve apertar ctrl+a e em seguida d (leia-se: solte o ctrl+a e aperte d).

No screen, o combo C-a faz com que você entre em modo de comando, ou seja, o que você apertar agora não vai ser passado para o shell, mas vai ser executado pelo comando screen, e ao apertar a tecla d, fará com que esse screen seja desatachado (eita) do seu terminal atual, e você retornará para o shell no ponto que estava antes de entrar no screen. Duvida? Aperte seta pra cima.

Legal, mas agora como voltar para o screen que você tinha aberto? Dica: se você apertou pra cima, não de enter

Quando executamos screen -S daora, nós criamos um novo screen com o nome de "daora". Para ver quais são os screens que você possui, digite: screen -ls, isso vai lhe retornar uma listagem com todos os screens atuais e o status deles.

Para reconectar ao screen, basta executar screen -r daora e você verá de volta tudo que tinha na tela antes de apertar C-a d.

Muitas vezes é necessário rolar a tela pra cima devido a stacktrace muito grande, ou simplesmente ser um stacktrace de java trollface, nesse caso, basta você apertar C-a [, colchetes mesmo, eu não errei a tecla.

Essa combinação vai fazer você entrar em um modo de cópia/scroll, aqui agora é possível navegar pelo terminal como se ele fosse um editor de texto read-only, você pode usar as setas ou mesmo Pg Up e Pg Down e navegar pelo histórico do screen. Não sei dizer qual o limite padrão dessa rolagem, mas você pode customizar pelo parametro -h LINHAS quando iniciar o screen.

Você pode ter quantos screens desejar e sempre será possível voltar a qualquer screen apertando C-a d para sair do screen atual e digitando screen -r outronomedescreen.

Também é possível dentro de um único screen você ter algo parecido com "abas", ou seja, varios terminais dentro do mesmo screen, mas isso é assunto pra outro post, vai se acostumando com o básico que outro dia eu falo desse assunto. Se você já é manjado das artes básicas do screen e ta com pressa pra aprender a usar o spell das abas, segue o link que eu usei pra aprender

[1] - Eu sei que o gunicorn pode ser executado em background e provavelmente transformado em um serviço da sua distribuição, mas lembre-se que eu sou um programador e não um analista de infra, então criar pacote deb, rpm ou serviços não é comigo, então deixe essas coisas pra quem sabe fazer e perdoe minha ignorancia.

PlayStation: Se você não entendeu, o sorvete la no topo é porque a fonetica de "screen" é parecida com "ice cream", para os leigos: "sorvete" em inglês

Nenhum comentário:

Postar um comentário