web-dev-qa-db-fra.com

Démarrer une session d’écran et exécuter un script sans y être associé?

J'essaie d'écrire un script pour:

  1. Démarrer une nouvelle session screen
  2. Exécuter un programme ou un script dans cette nouvelle session d'écran
  3. Détachez-vous de la session d'écran pendant que le programme de l'étape 2 peut toujours y être exécuté. Si le programme de l'étape 2 se termine, immédiatement ou plus tard, la session d'écran doit rester en cours d'exécution (détachée).

J'ai essayé toutes sortes de combinaisons avec screen -X program ou screen -S somename suivi de program suivi de screen -D, en combinant avec -d ou -m options qui Je trouve dans les questions et réponses liées mais rien ne fonctionne.

Le plus proche que j'ai pu obtenir était la suivante:

screen -S MySessionName -d -m myprogram

Ceci lance une nouvelle session d’écran dans le motif, exécutant myprogram. Sauf dès que myprogram finit (parfois instantanément) la session d’écran se termine, alors que je veux la garder en marche.

1
RocketNuts

Méthode 1

J'ai créé une configuration de démonstration que vous avez décrite ici sur ma machine. J'ai également fait face au problème que vous avez signalé. Mais l’ajout d’une petite ligne de script a résolu mon problème.

J'ai ajouté la ligne suivante à la fin de myprogram

exec $Shell

Une fois votre script terminé, le processus Bash se remplace par une nouvelle invocation de lui-même.

Méthode 2

Ou vous pouvez essayer la méthode suivante dans laquelle nous commençons un detached screen et envoyons une commande à cet écran en utilisant stuff

Pour cela, vous devez d'abord démarrer un écran détaché.

screen -dmS MySessionName

Et ensuite envoyez le script à cet écran.

screen -S MySessionName -p 0 -X stuff 'myprogram\n'

Cela a également fonctionné pour moi.

5
Rooney