
Ubuntu 14.04.5 LTS
Funcionalidad deseada: El servidor remoto de Ubuntu arranca e inicia automáticamente un proceso en curso como un usuario específico. Luego puedo iniciar sesión de forma remota más adelante y ver el resultado de pantalla pasado y actual del proceso en curso.
Plan actual:
Pasos automatizados:
El usuario "ubuntu" inicia sesión automáticamente en una terminal (TTY) al arrancar:
"sudo nano /etc/init/tty1.conf" Change: exec /sbin/getty -8 38400 tty1 To: exec /sbin/getty --autologin ubuntu -8 38400 tty1
El usuario "ubuntu" ejecuta la pantalla GNU:
screen -d -m -S screenname
El usuario "ubuntu" ejecuta el proceso en curso dentro de la pantalla GNU:
screen -S screenname -p 0 -X stuff "command^M"
Pasos manuales más adelante:
- Me conecto de forma remota como usuario "ubuntu" en otra terminal (TTY).
Vuelvo a conectarme a la sesión de pantalla GNU iniciada en el paso 2:
screen -r
- Puedo ver el resultado pasado y actual del proceso iniciado en el paso 3.
Preguntas:
- ¿Es esta la forma más eficaz de lograr el resultado deseado?
- ¿Cómo se pueden automatizar los comandos de los pasos 2 y 3?
- ¿Cómo pueden los comandos en los pasos 2 y 3no¿Activar cuando inicio sesión manualmente en el paso 4?
Respuesta1
Respuestas(a mis propias preguntas)
- ¿Es esta la forma más eficaz de lograr el resultado deseado?
Todavía no estoy seguro de si las soluciones siguientes son las más efectivas, pero puedo confirmar que al menos funciona en la versión indicada en Ubuntu. - ¿Cómo se pueden automatizar los comandos de los pasos 2 y 3?
¿Cómo es posible que los comandos de los pasos 2 y 3 no se activen cuando inicio sesión manualmente en el paso 4?
Paso uno
Puse lo siguiente en la parte inferior del archivo .profile en el directorio de usuario del usuario que inició sesión automáticamente durante el paso 1 anterior (/home/ubuntu/.profile):pgrep processname || /home/ubuntu/processscript.sh
Cuando el usuario inicia sesión automáticamente, este comando se ejecutará automáticamente porque está en .profile. La primera parte del comando (antes de "||" comprueba si 'nombre de proceso' ya se está ejecutando. De lo contrario, ejecutará la segunda parte del comando (después de "||"), es decir, "processscript.sh". Si 'nombre de proceso' ya se está ejecutando, no lo hará.
Esta verificación fue necesaria porque el proceso que quería ejecutar no podía tener varias instancias ejecutándose al mismo tiempo. Además, resuelve el problema del proceso que se ejecuta por segunda vez. Me conecto manualmente más tarde.
Segundo paso
Cree un archivo de script de shell llamado "processscript.sh" con el siguiente contenido:#!/bin/bash screen -d -m -S screenname && screen -S screenname -p 0 -X stuff "/home/ubuntu/command.sh^M"
Asegúrese de que "processscript.sh" esté en el directorio /home/ubuntu y que sea ejecutable con el comando:
chmod 744 processscript.sh
El script de shell anterior crea una instancia de pantalla con el nombre "screenname" y, si se completa correctamente, rellena la línea de comandos de esa instancia de pantalla con el comando "command.sh" con un retorno de carro (que es lo que significa "^M" en el final lo hace).
Paso tres
En el paso anterior, encontré algunos problemas al rellenar un comando con atributos en la línea de comando de la pantalla (creo que se requería algún carácter de escape). Para resolver esto simplemente, agregué el comando completo con atributos a un script de shell y lo usé en su lugar. Por lo tanto, cree otro script de shell (como el anterior) llamado "command.sh" y agregue el comando completo allí.