
Ubuntu 14.04.5LTS
Funcionalidade desejada: O servidor Ubuntu remoto inicializa e inicia automaticamente um processo contínuo como um usuário especificado. Posso então fazer login remotamente mais tarde e visualizar a saída de tela anterior e atual do processo em andamento.
Plano atual:
Etapas automatizadas:
O usuário "ubuntu" está logado automaticamente em 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
O usuário "ubuntu" executa a tela GNU:
screen -d -m -S screenname
O usuário "ubuntu" executa o processo em andamento na tela GNU:
screen -S screenname -p 0 -X stuff "command^M"
Etapas manuais posteriormente:
- Efetuo login remotamente como usuário "ubuntu" em outro terminal (TTY).
Eu reconecto a sessão de tela GNU iniciada na etapa 2:
screen -r
- Consigo visualizar a saída anterior e atual do processo iniciado na etapa 3.
Questões:
- Esta é a maneira mais eficaz de alcançar o resultado desejado?
- Como os comandos nas etapas 2 e 3 podem ser automatizados?
- Como os comandos nas etapas 2 e 3nãoativar quando eu fizer login manualmente na etapa 4?
Responder1
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 indicada no Ubuntu. - Como os comandos nas etapas 2 e 3 podem ser automatizados?
Como os comandos nas etapas 2 e 3 não podem ser ativados quando eu faço login manualmente na etapa 4?
Passo um
Coloquei o seguinte na parte inferior do arquivo .profile no diretório do usuário que está sendo conectado automaticamente durante a etapa 1 acima (/home/ubuntu/.profile):pgrep processname || /home/ubuntu/processscript.sh
Quando o usuário estiver logado automaticamente, este comando será executado automaticamente porque está em .profile. A primeira parte do comando (antes de "||" verifica se 'processname' já está em execução. Caso contrário, ele executará a segunda parte do comando (depois de "||"), ou seja, "processscript.sh" .. . Se 'processname' já estiver em execução,
esta verificação foi necessária porque o processo que eu queria executar não poderia ter várias instâncias em execução ao mesmo tempo. Eu faço login manualmente mais tarde.
Passo dois
Crie um arquivo de script 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"
Certifique-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 instância de tela com o nome "screenname" e, se concluído com sucesso, preenche a linha de comando dessa instância de tela com o comando "command.sh" com um retorno de carro (que é o que o "^M" em o fim faz).
Passo três
Na etapa anterior, encontrei alguns problemas ao preencher um comando com atributos na linha de comando da tela (acho que foi necessário algum escape de caracteres). Para resolver isso de forma simples, adicionei o comando completo com atributos a um script de shell e usei-o. Portanto, crie outro script de shell (como acima) chamado "command.sh" e adicione o comando completo nele.