web-dev-qa-db-fra.com

Connexion automatique de l'utilisateur à TTY au démarrage, puis exécution automatique de la commande dans l'écran GNU

Ubuntu 14.04.5 LTS

Fonctionnalité souhaitée: Le serveur distant Ubuntu démarre et lance automatiquement un processus en cours en tant qu'utilisateur spécifié. Je peux ensuite me connecter à distance à un moment ultérieur et voir la sortie d'écran passée et actuelle du processus en cours.

Plan actuel:

Étapes automatisées:

  1. L'utilisateur "Ubuntu" est automatiquement connecté à un terminal (TTY) au démarrage:

    "Sudo nano /etc/init/tty1.conf"
    
    Change: exec /sbin/getty -8 38400 tty1
    
    To: exec /sbin/getty --autologin ubuntu -8 38400 tty1
    
  2. L'utilisateur "Ubuntu" lance l'écran GNU:

    screen -d -m -S screenname
    
  3. L'utilisateur "ubuntu" exécute le processus en cours dans l'écran GNU:

    screen -S screenname -p 0 -X stuff "command^M"
    

Étapes manuelles à une date ultérieure:

  1. Je me connecte à distance en tant qu'utilisateur "Ubuntu" dans un autre terminal (TTY).
  2. Je me reconnecte à la session GNU à l'écran démarrée à l'étape 2:

    screen -r
    
  3. Je suis en mesure de visualiser les résultats passés et actuels du processus démarré à l'étape 3.

Questions:

  • Est-ce le moyen le plus efficace d'atteindre le résultat souhaité?
  • Comment les commandes des étapes 2 et 3 peuvent-elles être automatisées?
  • Comment les commandes des étapes 2 et 3 ne peuvent-elles pas être activées lorsque je me connecte manuellement à l'étape 4?
2
Toby

Réponses (à mes propres questions)

  • Est-ce le moyen le plus efficace d'atteindre le résultat souhaité?
    Je ne sais toujours pas si les solutions ci-dessous sont les plus efficaces, mais je peux confirmer que cela fonctionne au moins avec la version indiquée sur Ubuntu.
  • Comment les commandes des étapes 2 et 3 peuvent-elles être automatisées?
  • Comment les commandes des étapes 2 et 3 peuvent-elles ne pas s'activer lorsque je me connecte manuellement à l'étape 4?

    Première étape
    J'inscris ce qui suit au bas du fichier .profile dans le répertoire utilisateur de l'utilisateur connecté automatiquement à l'étape 1 ci-dessus (/home/ubuntu/.profile):

    pgrep processname || /home/ubuntu/processscript.sh
    

    Lorsque l'utilisateur est automatiquement connecté, cette commande s'exécutera automatiquement car elle est au format .profile. La première partie de la commande (avant le "||" vérifie si 'processname' est déjà en cours d'exécution. Dans le cas contraire, il exécutera la deuxième partie de la commande (après le "||"), c'est-à-dire "processscript.sh" .. .Si 'nomprocessus' est déjà en cours d'exécution, ce ne sera pas.

    Cette vérification était nécessaire car le processus que je voulais exécuter ne pouvait pas exécuter plusieurs instances en même temps. En outre, cela résout le problème du processus en cours d'exécution une deuxième fois lorsque je me connecte manuellement plus tard.

    Deuxième étape
    Créez un fichier de script Shell appelé "processscript.sh" avec le contenu suivant:

    #!/bin/bash
    screen -d -m -S screenname &&
    screen -S screenname -p 0 -X stuff "/home/ubuntu/command.sh^M"
    

    Assurez-vous que "processscript.sh" se trouve dans le répertoire/home/ubuntu et qu'il est exécutable à l'aide de la commande suivante:

    chmod 744 processscript.sh
    

    Le script Shell ci-dessus crée une instance d'écran avec le nom "nom d'écran" et, si l'opération est terminée avec succès, il enregistre dans la ligne de commande de cette instance d'écran la commande "command.sh" avec un retour à la ligne (qui correspond à "^ M"). la fin fait).

    Troisième étape
    Lors de l’étape précédente, j’ai rencontré des problèmes lors du bourrage d’une commande avec des attributs dans la ligne de commande de l’écran (je pense que l’échappement de caractères était requis). Pour résoudre ce problème simplement, j'ai ajouté la commande complète avec les attributs à un script Shell et je l'ai utilisé à la place. Par conséquent, créez un autre script Shell (comme ci-dessus) appelé "command.sh" et ajoutez-y la commande complète.

1
Toby