Usuário de login automático para TTY na inicialização e, em seguida, comando de execução automática na tela GNU

2

Ubuntu 14.04.5 LTS

Funcionalidade desejada: O servidor remoto do Ubuntu inicializa e inicia automaticamente um processo contínuo como um usuário especificado. Eu posso então fazer o login remotamente mais tarde e ver a saída de tela atual e passada do processo em andamento.

Plano atual:

Etapas automáticas:

  1. O usuário "ubuntu" está conectado automaticamente a um terminal (TTY) na inicialização:

    "sudo nano /etc/init/tty1.conf"
    
    Change: exec /sbin/getty -8 38400 tty1
    
    To: exec /sbin/getty --autologin ubuntu -8 38400 tty1
    
  2. O usuário "ubuntu" executa a tela GNU:

    screen -d -m -S screenname
    
  3. O usuário "ubuntu" executa o processo em andamento na tela do GNU:

    screen -S screenname -p 0 -X stuff "command^M"
    

Etapas manuais mais tarde:

  1. Eu faço login remotamente como usuário "ubuntu" em outro terminal (TTY).
  2. Eu anexar novamente à sessão da tela GNU iniciada na etapa 2:

    screen -r
    
  3. Eu posso ver o resultado passado e atual do processo iniciado na etapa 3.

Perguntas:

  • Esta é a maneira mais eficaz de alcançar o resultado desejado?
  • Como os comandos na etapa 2 & amp; 3 ser automatizado?
  • Como os comandos na etapa 2 & amp; 3 não ativa quando faço login manualmente no passo 4?
por Toby 06.01.2017 / 14:31

1 resposta

1

Respostas (para minhas próprias perguntas)

  • Esta é a maneira mais eficaz de alcançar o resultado desejado?
    Ainda não tenho certeza se as soluções abaixo são as mais eficazes, mas posso confirmar que pelo menos funciona na versão declarada no Ubuntu.
  • Como os comandos na etapa 2 & amp; 3 ser automatizado?
  • Como os comandos na etapa 2 & amp; 3 não ativar quando eu fizer login manualmente no passo 4?

    Primeiro passo
    Eu coloquei o seguinte na parte inferior do arquivo .profile no diretório do usuário do qual o usuário fez login automaticamente durante a etapa 1 acima (/home/ubuntu/.profile):

    pgrep processname || /home/ubuntu/processscript.sh
    

    Quando o usuário está logado automaticamente, este comando será executado automaticamente porque está em .profile. A primeira parte do comando (antes do "||" verifica se 'processname' já está em execução. Caso contrário, ele executará a segunda parte do comando (após o "||"), ex: "processscript.sh" .. Se 'processname' já estiver em execução, não será.

    Essa verificação foi necessária, pois o processo que eu queria executar não poderia ter várias instâncias sendo executadas ao mesmo tempo. Além disso, resolve o problema do processo em execução pela segunda vez quando eu fizer login manualmente mais tarde.

    Etapa dois
    Crie um arquivo de script de shell chamado "processscript.sh" com o seguinte conteúdo:

    #!/bin/bash
    screen -d -m -S screenname &&
    screen -S screenname -p 0 -X stuff "/home/ubuntu/command.sh^M"
    

    Assegure-se de que "processscript.sh" esteja no diretório / home / ubuntu, e que seja executável com o comando:

    chmod 744 processscript.sh
    

    O script de shell acima cria uma ocorrência de tela com o nome "screenname" e, se concluída com êxito, insere a linha de comando da ocorrência da tela com o comando "command.sh" com um retorno de carro (que é o "^ M "no final faz).

    Etapa três
    Na etapa anterior, encontrei alguns problemas ao inserir um comando com atributos na linha de comando da tela (acho que foi necessário algum escape de caractere). Para resolver isso simplesmente, adicionei o comando completo com atributos a um script de shell e o usei. Portanto, crie outro script de shell (como acima) chamado "command.sh" e adicione o comando completo nele.

por Toby 22.01.2017 / 10:55