Ejecute un programa con pantalla GNU e inmediatamente desprenda

27

Estoy tratando de descubrir cómo escribir un script que inicie los programas en las sesiones de GNU Screen en el arranque del sistema. Estoy intentando esto:

#!/bin/bash
screen -S test -d -m -X $HOME/folder/folder/.program \
screen -S test2 -d -m -X $HOME/folder/folder/.program2 \

pero el comando no se puede ejecutar porque la sesión ya está desconectada? Lo único que necesito es ejecutar el comando en la sesión de pantalla y desconectar esta sesión de inmediato.

Gracias por las respuestas, pero ahora me enfrenté a otro problema. El script deja de funcionar después de poner algunas variables para mi "programa y programa2". Algo como esto:

#!/bin/bash
screen -S test -d -m $HOME/folder/folder/.program -f config.cfg

por alguna razón, "-f config.cfg" fue ignorado. También trato de citar el comando y tampoco ayuda.

TbMa
fuente
¿Por qué la -Xopción?
enzotib

Respuestas:

34

¿Realmente quisiste poner \el final de la línea? Si no es así, intente eliminarlos: se escapan del siguiente personaje.

Además, soltar -Xayuda a que la configuración funcione para mí, por ejemplo:

screen -S test -d -m -X touch /tmp/test

falla con No screen session found, sin embargo:

screen -S test -d -m touch /tmp/test

funciona bien. Como tal, sospecho que lo siguiente funcionará para usted:

#!/bin/bash
screen -S test -d -m $HOME/folder/folder/.program
screen -S test2 -d -m $HOME/folder/folder/.program2

Recuerde que si ejecuta esto durante el arranque, $ HOME no es lo mismo que después de iniciar sesión como usuario específico. Si necesita ejecutarlo como un determinado usuario, necesitará usar los gustos de supara ejecutarlo como ese usuario, y especificar la ruta completa eliminará cualquier ambigüedad:

#!/bin/bash
screen -S test -d -m su - username /home/username/folder/folder/.program
screen -S test2 -d -m su - username /home/username/folder/folder/.program2

O bien, llamaría a todo el script anterior como su - username /path/to/your/script.

Llora Havok
fuente
Gracias por las respuestas, pero ahora me enfrenté a otro problema. El script deja de funcionar después de poner algunas variables para mi "programa y programa2"
TbMa
Esto: screen -S test -d -m $HOME/folder/folder/.programcasi hace exactamente lo que estoy buscando, excepto si la carpeta / .program está terminada, la sesión de pantalla se cierra automáticamente. ¿Hay alguna manera de mantener la sesión de pantalla (shell) ejecutándose incluso después de que el programa haya terminado? ¿Quizás en lugar de ejecutar el programa exclusivamente, inicie un shell que inicie el programa y luego regrese al indicador de shell, o algo así?
RocketNuts
4

Como mencionó Cry Havok, puede colocar el programa directamente en la línea de comandos.

Si realmente debe usar la opción -X, entonces a) necesita especificar el comando 'pantalla' yb) la sesión debe existir de antemano.

screen -dmS test
screen -S test -X screen $HOME/folder/folder/.program
screen -dmS test2
screen -S test2 -X screen $HOME/folder/folder/.program2
Arcege
fuente
Si coloca el programa en la línea de comandos, la pantalla se cierra cuando sale del programa; No veo una bandera de línea de comandos para mantener la pantalla abierta si desea ver la salida de la consola. Si inicia la pantalla y envía los comandos por separado, como se muestra aquí, es posible que necesite sleepcomandos explícitos para dar tiempo a la pantalla para iniciar la sesión antes de enviar el comando.
Chinasaur
Esta respuesta es muy similar a la respuesta stackoverflow.com que responde una pregunta similar . Prefiero esta respuesta más que @CryHavok porque esta respuesta ejecuta su programa dentro del shell predeterminado de su usuario (@CryHavok ejecuta su programa sin un shell principal, por lo que cuando el programa muere o lo controla, la sesión de pantalla finaliza inmediatamente)
Trevor Boyd Smith