Estoy intentando averiguar cómo escribir un script que inicie programas en sesiones GNU Screen al arrancar el 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á separada? Lo único que necesito es ejecutar el comando en la sesión de pantalla y separar esta sesión inmediatamente.
Gracias por las respuestas, pero ahora me enfrenté a otro problema. Script deja de funcionar después de poner algunas variables para mi "programa y program2". 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 estoy tratado de citar comando y doesnt ayuda también.
¿Realmente quería poner el \
al final de la línea? Si no es así, intente eliminarlos, ya que escapan al carácter siguiente.
Además, quitar la -X
me ayuda a que la configuración funcione, por ejemplo:
screen -S test -d -m -X touch /tmp/test
falla con No hay sesión de pantalla encontrado
, 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 en el arranque, $HOME no es lo mismo que después de iniciar sesión como un usuario específico. Si necesita ejecutarlo como un usuario determinado, tendrá que utilizar su
para 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, usted llamaría a todo el script de arriba como su - nombre de usuario /ruta/a/tu/script
.
Como mencionó Cry Havok, puedes colocar el programa directamente en la línea de comandos.
Si realmente debes usar la opción -X, entonces a) necesitas especificar el comando 'screen' y b) la sesión necesita 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