web-dev-qa-db-fra.com

Exécuter le script dans un écran

Je veux exécuter un script bash dans un écran détaché. Le script appelle un programme plusieurs fois, chacun prenant trop de temps à attendre. Ma première pensée a été d'ouvrir simplement un écran puis d'appeler le script, mais il semble que je ne puisse pas me détacher (par ctrl-a d) pendant l'exécution du script. J'ai donc fait quelques recherches et trouvé ceci instruction pour remplacer le Shebang par ce qui suit:

#!/usr/bin/screen -d -m -S screenName /bin/bash

Mais cela ne fonctionne pas non plus (les options ne sont pas reconnues). Aucune suggestion?

PS Il me vient à l'esprit que screen -dmS name ./script.sh fonctionnerait probablement pour mes besoins, mais je suis toujours curieux de savoir comment intégrer cela dans le script. Je vous remercie.

26
bongbang

La ligne Shebang que vous avez vue peut fonctionner sur certaines variantes Unix, mais pas sur Linux. Les lignes Shebang de Linux sont limitées: vous ne pouvez avoir qu'une seule option. La chaîne entière -d -m -S screenName /bin/bash est passé comme une seule option à screen, au lieu d'être passé sous forme de mots différents.

Si vous souhaitez exécuter un script à l'intérieur de l'écran et ne pas jouer avec plusieurs fichiers ou devis, vous pouvez faire du script un script Shell qui appelle l'écran s'il n'est pas déjà à l'intérieur de l'écran.

#!/bin/sh
if [ -z "$STY" ]; then exec screen -dm -S screenName /bin/bash "$0"; fi
do_stuff
more_stuff

Selon les pages de manuel de l'écran:

  • screen -d -m Écran de démarrage en mode détaché. Cela crée une nouvelle session mais ne s'y attache pas. Ceci est utile pour les scripts de démarrage du système.
  • -S sessionname Définissez le nom de la nouvelle session sur sessionname.

Ainsi, lorsque j'ai exécuté la commande que vous avez fournie: screen -dmS name ./script.sh

L'écran démarre une fenêtre appelée nom et exécute automatiquement ce script.sh. Pour y revenir et voir le statut, il vous suffit de taper: screen -r test

Maintenant avec Ubuntu 14.04, les commandes sont légèrement différentes. Essayer:

screen -d -m -S test

Maintenant, pour exécuter le script, vous devrez aller dans leur fichier de configuration pour le faire:

Sudo vim /etc/screenrc

Une fois là-bas, faites défiler vers le bas et vous verrez:

# 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

C'est la section où vous devrez ajouter le nom du script à exécuter et qui devrait vous permettre de faire tout ce dont vous avez besoin à partir de l'écran.

17
ryekayo

C'est un peu vieux mais l'un des rares fils que j'ai pu trouver pour le faire. Après avoir joué, le seul moyen de le faire fonctionner en mode détaché avec ubuntu 14. est

screen -d -m -t nameofwindow sh nameoflaunch.sh

Le lancement serait la deuxième partie ci-dessus qui héberge les commandes Java Java et la version du serveur. Je lance Vanilla.

5
ProjectEd