Ejecutar script en una pantalla

Ejecutar script en una pantalla

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.shprobablemente 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/bashse 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.

información relacionada