¿Es posible en un script saber si se está ejecutando desde la pantalla de GNU?

10

Tenemos un proceso de larga ejecución en un servidor remoto que se inicia manualmente de vez en cuando. Desafortunadamente, las conexiones a Internet mueren, los núcleos entran en pánico y la sesión ssh que se usa para conectarse e iniciar el trabajo puede encontrar una gran cantidad de otros desafíos.

La pantalla parece una manera perfecta de garantizar que el proceso no se interrumpa. Sin embargo, confiar en una persona para que siempre recuerde iniciar la pantalla y luego ejecutar el script para iniciar el proceso es un problema a la espera de que suceda. ¿Hay alguna forma del script que pueda verificar para ver si el script se llama desde la pantalla? Si es así, el proceso continuará; de lo contrario, el script saldrá con un mensaje que le indicará al usuario que ejecute la pantalla primero.

cclark
fuente

Respuestas:

11

Hay una variable de entorno para eso. Si se está ejecutando dentro de la pantalla, $TERMserá screen. Es así de simple; solo haz un if en él. Por ejemplo,

if [ $TERM != 'screen' ]; then echo foo; else echo bar; fi

hará eco en la barra cuando esté en la pantalla; De lo contrario.

Falcon Momot
fuente
2
También podría ser screen-256colorsi el usuario ha configurado el soporte de 256 colores.
mgorven
o screen-bce en sistemas con byobu instalado. echo $ TERM screen-
bce
7

Mientras trabaja con la pantalla, ¿por qué no ejecuta el script con 'nohup'? Esto también asegurará que continúe ejecutándose si se desconecta.

Da salida a un archivo de forma predeterminada, por lo que puede usar otras herramientas para monitorear la salida del script si lo desea.

Magallanes
fuente
1
Si se ejecuta con nohup, se lograría el mismo resultado de garantizar que el proceso continúe ejecutándose ¿no tendría el mismo problema de que alguien se olvide de ejecutar el script con nohup? ¿O hay una manera en un script para garantizar que se utilizó 'nohup' o necesito crear un script de envoltura que llame a mi script original con nohup?
cclark
Si. Si bien amo a mis padawans (sysadmins junior) como amo a mis hijos, con frecuencia olvidan ese tipo de cosas. Así que todo queda envuelto para que no tengan que recordar qué cosas escribir para prefijar los comandos importantes.
Magellan