Execute o script em uma tela

18

Eu quero executar um script bash em uma tela desanexada. O script chama um programa algumas vezes, cada uma demorando muito para esperar. Meu primeiro pensamento foi simplesmente abrir uma tela e depois chamar o script, mas parece que não consigo separar (por ctrl-a d ) enquanto o script está rodando. Então eu fiz algumas pesquisas e encontrei esta instrução para substituir o shebang com o seguinte:

#!/usr/bin/screen -d -m -S screenName /bin/bash

Mas isso não funciona (as opções não são reconhecidas). Alguma sugestão?

PS Ocorreu-me agora que screen -dmS name ./script.sh provavelmente funcionaria para os meus propósitos, mas ainda estou curioso sobre como incorporar isso ao script. Obrigado.

    
por bongbang 15.10.2014 / 00:01

3 respostas

19

A linha shebang que você viu pode funcionar em algumas variantes unix, mas não no Linux. As linhas de shebang do Linux são limitadas: você só pode ter uma opção. A string inteira -d -m -S screenName /bin/bash é passada como uma única opção para screen , em vez de ser passada como palavras diferentes.

Se você quer rodar um script dentro da tela e não mexer com vários arquivos ou citações, você pode transformar o script em um script de shell que invoca a tela, se ainda não estiver dentro da tela.

#!/bin/sh
if [ -z "$STY" ]; then exec screen -dm -S screenName /bin/bash "$0"; fi
do_stuff
more_stuff
    
por 15.10.2014 / 02:28
14

De acordo com as páginas do manual da tela:

  • %código%    Inicie a tela no modo desanexado. Isso cria uma nova sessão, mas não se anexa a ela. Isso é útil para scripts de inicialização do sistema.
  • %código%    Defina o nome da nova sessão para sessionname.

Então, quando eu executei o comando que você forneceu: screen -d -m

A tela inicia uma janela chamada nome e executa automaticamente esse script.sh. Para voltar para lá para ver o status, basta digitar: -S sessionname

Agora, com o Ubuntu 14.04, os comandos são um pouco diferentes. Experimente:

screen -dmS name ./script.sh

Agora, para executar o script, você precisará ir ao arquivo de configuração dele para fazer isso:

screen -r test

Uma vez lá, vá até o final e você verá:

# Example of automatically running some programs in windows on screen startup.
#
#   The following will open top in the first window, an ssh session to monkey
#   in the next window, and then open mutt and tail in windows 8 and 9
#   respectively.
#
# screen top
# screen -t monkey ssh monkey
# screen -t mail 8 mutt
# screen -t daemon 9 tail -f /var/log/daemon.log

Esta é a seção onde você precisará adicionar o nome do script para ser executado e que deve permitir que você faça tudo o que você precisa na tela.

    
por 15.10.2014 / 00:09
2

Isso é um pouco antigo, mas um dos poucos tópicos que consegui encontrar para fazer isso. Depois de brincar, a única maneira de fazer isso rodando no modo desconectado com o ubuntu 14. é

screen -d -m -t nameofwindow sh nameoflaunch.sh

O lançamento seria a segunda parte acima que abriga os comandos java atuais e a versão do servidor. Eu corro baunilha.

    
por 05.03.2016 / 13:43