quinta-feira, 17 de outubro de 2013

Como executar um script dentro de uma sessão do GNU Screen

Ando brincando de minerar Bitcoins (estou fascinado com a tecnologia e preciso me lembrar de escrever algo mais informativo sobre o assunto aqui) e me deparei com um problema.

Ao iniciar o programa de mineração (estou usando o bfgminer) na linha de comando, ele exibe diversas informações e estatísticas relativas ao hardware e ao andamento da sua "mineração". Acontece que eu gostaria de iniciar o programa automaticamente durante o boot. Até aí tudo bem, pois isso é facilmente resolvido criando-se um script e agendando sua execução através do cron toda vez que a máquina reiniciar, mas como fazer depois para acessar os dados do programa depois, inclusive via SSH?

Pensando nisso, achei que uma seção do GNU Screen poderia resolver o problema; mas como executar o script dentro de uma seção do Screen automaticamente? A solução para isso eu achei em algum lugar no stackoverfow.com:

Acrescentei as seguintes linhas ao meu script:

screen -dmS nomeDaSessão
screen -S nomeDaSessão -p 0 -X stuff "comando$(printf \\r)"


Explicando:
  • -dmS inicia uma sessão "detached" do screen com o nome escolhido por você.
  • -X stuff executa o comando ou script dentro da sessão especificada pelo atributo -S.
  • -p 0 especifica o número do terminal dentro da seção do Screen. Como ela só tem um terminal rodando dentro da seção, este começa no 0.
  • $(printf \\r) insere um caractere do tipo "Enter" logo após o comando ou script passado como atributo para, de fato, entrar com o comando.

Bônus


Screen -S nomeDaSessão -p 1 comando2

executa o comando2 em um novo terminal (o de nº 1) dentro da mesma seção do Screen.

Homepage do GNU Screen: https://www.gnu.org/software/screen/

Comente clicando!