Estoy tratando de forzar a la pantalla GNU a crear un terminal "virtual", sin conectarlo, ejecutar el script dentro y NO terminar la sesión una vez que el script termina.
Intenté muchas combinaciones, incluyendo:
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ó. O recibo sesión sin script ejecutado, el script se ejecuta, pero la sesión finaliza una vez que finaliza o aparece el error "No se encontró sesión de pantalla".
Lo que básicamente estoy tratando de hacer es ejecutar el escucha UDP, escrito en PHP y hacerlo funcionar en bucle infinito (no interrumpa la escucha). Sí, podría ejecutar el script PHP &al final, obligando a PHP CLI a ejecutarse como daemon. El problema es que estoy usando un pedazo de basura llamado 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.
Entonces screenparece ser la única opción. Pero no puedo entender, ¿por qué termina la sesión una vez que finaliza el comando ejecutado o finaliza el script?
EDITAR : También he probado el ejemplo que se encuentra 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 de ejemplo dijo, lo será.
fuente

screen, solo crea una ventana para ejecutar un solo comando. Cuando el comando sale, la ventana se cierra yscreenno queda nada que hacer, por lo que sale.screencierre? Por cierto: ¡todavía no entiendo la idea! Si llamoscreen -dmS name, creo una ventana separada, que tampoco tiene nada que hacer. ¡Pero no se cierra automáticamente! Pero cuando quiero ejecutar algo en esa pantalla separada, termina una vez que se realiza la ejecución. ¿Por qué? No veo lógica aquí. ¿Puede tener ventana sin hacer nada, pero no puede tener ventana haciendo algo y luego sin hacer nada?&al final), debido al servidor con errores (QNAP), se terminan cuando finaliza la sesión (me dijeron, no deberían en Linux normal, si se ejecutan con&). Por lo tanto, no estoy buscando hacer nada después destart_udp_listeners.shfinalizar, solo cómo evitar que se termine la sesión. Mientras no sea así, mis oyentes PHP funcionan bien.Respuestas:
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 shell interactivo. Aquí hay una forma de hacerlo (suponiendo
bashque sea la opción del shell interactivo):-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 script, que terminará, usesh -cpara ejecutar múltiples comandosexec bash: después de que finalice el script, loshde arriba cambiará a un shell interactivo (bash), que nunca debería salir hasta que algo externo lo finalice. Esto se mantendráscreenabierto mientras labashinstancia esté viva.fuente
export IGNOREEOF=1para evitar la terminación accidental con Ctrl + D debería darme la solución perfecta, he estado buscando toda la noche. ¡GRACIAS! :]bash -csin embargo.screen -LS sauf bash -c "sudo aptitude update && sudo aptitude full-upgrade; exec bash"No tuve suerte con
sh -cmi raspberry pi 2 con Debian 7.8. Perobash -chizo el trabajo:Mando:
fuente
bashyshparece ser dos conchas diferentes. Eso es todo, creo, pero puedo estar equivocado, ya que soy un novato en Linux.sh -cabash -chacer el truco. No entiendo por qué, tantoshybashestán instalados, así que todavía estoy perdiendo el sueño por eso, pero al menos funciona.shprobablemente apunta a en/bin/dashlugar de/bin/bash. Debian cambió el shell por defecto a partirbashdedashhace unos años.