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 adelantesh -c '...'
:en lugar de simplemente ejecutar su secuencia de comandos, que terminará, usesh -c
para ejecutar varios comandosexec 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á lascreen
abierto mientras elbash
la instancia está activa.