
Quiero ejecutar un script bash en una pantalla separada. El script llama a un programa varias veces, y cada una de ellas tarda demasiado en esperar. Lo primero que pensé fue simplemente abrir una pantalla y luego llamar al script, pero parece que no puedo desconectarme (mediante ctrl-a d
) mientras el script se está ejecutando. Así que investigué un poco y encontré esto.instrucciónpara reemplazar el shebang con lo siguiente:
#!/usr/bin/screen -d -m -S screenName /bin/bash
Pero eso tampoco funciona (las opciones no se reconocen). ¿Alguna sugerencia?
PD: Se me ocurre ahora que screen -dmS name ./script.sh
probablemente funcionaría para mis propósitos, pero todavía tengo curiosidad sobre cómo incorporar esto al guión. Gracias.
Respuesta1
Elel asuntoLa línea que ha visto puede funcionar en algunas variantes de Unix, pero no en Linux. Las líneas shebang de Linux son limitadas: sólo puedes tener una opción. La cadena completa -d -m -S screenName /bin/bash
se pasa como una única opción a screen
, en lugar de pasarse como palabras diferentes.
Si desea ejecutar un script dentro de la pantalla y no perder el tiempo con varios archivos o citar, puede convertir el script en un script de shell que invoque la pantalla si aún no está dentro de la pantalla.
#!/bin/sh
if [ -z "$STY" ]; then exec screen -dm -S screenName /bin/bash "$0"; fi
do_stuff
more_stuff
Respuesta2
Según las páginas de manual de la pantalla:
screen -d -m
Pantalla de inicio en modo independiente. Esto crea una nueva sesión pero no se adjunta a ella. Esto es útil para los scripts de inicio del sistema.-S sessionname
Establezca el nombre de la nueva sesión en nombre de sesión.
Entonces, cuando ejecuté el comando que proporcionaste:screen -dmS name ./script.sh
La pantalla inicia una ventana llamada nombre y ejecuta automáticamente ese script.sh. Para volver allí y ver el estado, simplemente escriba:screen -r test
Ahora con Ubuntu 14.04, los comandos son ligeramente diferentes. Intentar:
screen -d -m -S test
Ahora, para ejecutar el script, deberás ir a su archivo de configuración para hacerlo:
sudo vim /etc/screenrc
Una vez allí, desplácese hacia abajo y verá:
# Example of automatically running some programs in windows on screen startup.
#
# The following will open top in the first window, an ssh session to monkey
# in the next window, and then open mutt and tail in windows 8 and 9
# respectively.
#
# screen top
# screen -t monkey ssh monkey
# screen -t mail 8 mutt
# screen -t daemon 9 tail -f /var/log/daemon.log
Esta es la sección donde deberá agregar el nombre del script para ejecutarlo y que debería permitirle hacer todo lo que necesita desde la pantalla.
Respuesta3
Este es un poco viejo pero es uno de los pocos hilos que pude encontrar para hacer esto. Después de jugar, la única forma de hacer que esto funcione en modo independiente con ubuntu 14 es
screen -d -m -t nameofwindow sh nameoflaunch.sh
El lanzamiento sería la segunda parte anterior que alberga los comandos Java actuales y la versión del servidor. Yo uso vainilla.