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:
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
L'utilisateur "Ubuntu" lance l'écran GNU:
screen -d -m -S screenname
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:
Je me reconnecte à la session GNU à l'écran démarrée à l'étape 2:
screen -r
Questions:
Réponses (à mes propres questions)
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.