GNU/Linux >> Tutoriales Linux >  >> Linux

¿Evitar que Gnu Screen termine la sesión una vez que finaliza el script ejecutado?

Estoy tratando de forzar la pantalla GNU para crear un terminal "virtual", sin adjuntarlo, ejecutar el script dentro y NO terminar la sesión una vez que finaliza el script.

Probé muchas combinaciones, entre ellas:

screen -dmS udplistener /share/Sys/autorun/start_udp_listeners.sh

o

screen -S udplistener -X /share/Sys/autorun/start_udp_listeners.sh

y ninguno de ellos funcionó. Obtengo una sesión sin el script ejecutado, el script se ejecuta, pero la sesión finaliza una vez que finaliza o aparece el error "No se encontró ninguna sesión de pantalla".

Básicamente, lo que estoy tratando de hacer es ejecutar el oyente UDP, escrito en PHP y hacer que funcione en bucle infinito (no interrumpa la escucha). Sí, podría ejecutar un script PHP con & al final, obligando a PHP CLI a ejecutarse como demonio. El problema es que estoy usando una basura llamada servidor (QNAP:¡nunca, nunca compre esta basura!) que parece estar ignorando esto. Tan pronto como cierre la sesión de SSH, los scripts se detienen.

Así que screen parece ser la única opción. Pero no puedo entender, ¿por qué finaliza la sesión una vez que finaliza el comando o el script ejecutado?

EDITAR :También probé un ejemplo encontrado en Internet:

screen -dmS name
screen -S name -p windowname -X stuff 'mc
'

¡No falta! Después de adjuntarlo (screen -R name ) Veo que Midnight Commander NO HA sido ejecutado. Aunque el autor del ejemplo dijo, lo será.

Respuesta aceptada:

Para mantener la pantalla ocupada después de que se complete el script, simplemente mantenga algo persistente ejecutándose en una ventana. La opción más simple para ese "algo" es probablemente un caparazón interactivo. Aquí hay una forma de hacerlo (suponiendo que bash como elección de shell interactivo):

screen -dmS session_name sh -c '/share/Sys/autorun/start_udp_listeners.sh; exec bash'
  • -dm :inicia la pantalla en modo separado
  • -S :establece el nombre de la sesión para la pantalla para una recuperación más fácil más adelante
  • sh -c '...' :en lugar de simplemente ejecutar su secuencia de comandos, que terminará, use sh -c para ejecutar varios comandos
  • exec bash :después de que finaliza el script, sh desde arriba cambiará a un shell interactivo (bash ), que nunca debería salir hasta que algo externo lo finalice. Esto mantendrá la screen abierto mientras el bash la instancia está activa.

Linux
  1. ¿Enviar entrada a una sesión de pantalla desde el exterior?

  2. ¿Cómo saber si estoy en una sesión Tmux desde un script Bash?

  3. ¿Evitar que Signint llegue a los procesos secundarios?

  4. Evite que ssh rompa los parámetros del script de shell

  5. Cómo ejecutar un script cuando finaliza la sesión de xfce

Cómo usar GNU Screen para administrar sesiones de terminal en Linux

Eliminar la sesión INVITADA de la pantalla de inicio de sesión de Ubuntu

Matar sesión de pantalla separada

Script bash:usar el comando de script desde un script bash para iniciar sesión

Evite que VRRP Master se convierta en Master una vez que haya fallado

¿Cómo configurar D-Bus y SSH X-Forwarding para evitar que SSH se cuelgue al salir?