Tag Archives: linux

Ne plus perdre ses connexions en utilisant screen

Bonjour et bienvenue sur le blog http://blog.cedrictemple.net. Aujourd’hui nous allons parler d’administration système Linux et d’un outil très pratique : screen. Cet outil va vous permettre:

  • de retrouver facilement vos sessions SSH
  • d’ouvrir et gérer plusieurs terminaux dans une seule session SSH
  • de gérer ses terminaux dans votre session

 

Screen est un gestionnaire de terminaux. Faisons un parallèle afin que vous compreniez l’intérêt de screen. Imaginez que vous soyez sur un ordinateur. Sur cet ordinateur, vous ne pouvez lancer qu’un seul programme, une seule fenêtre à la fois. Par exemple, vous ne pouvez lancer que LibreOffice pour rédiger un document. Si vous souhaitez lancer Firefox pour faire une recherche sur la document d’un produit et ajouter des éléments dans votre document, vous devez fermer LibreOffice… ou alors vous connectez sur un second ordinateur, séparé, avec un autre clavier, une autre souris, un autre écran. Dès lors, votre vie serait plus complexe. D’ailleurs, on n’imagine pas travailler comme cela aujourd’hui. Le travail de gérer plusieurs fenêtres est réalisé par un « Window Manager ». Pour faire un parallèle, screen est le « window manager » de vos terminaux. Vous installez screen sur tous vos serveurs et vous pouvez dans une seule et même connexion SSH disposer de plusieurs terminaux. Simple et terriblement efficace.

Tout d’abord, il faut se connecter sur le serveur, en SSH. Puis, juste après la connexion, lancer screen. Je vous conseille très fortement de donner immédiatement un nom à la session screen. Cela vous permettra de la retrouver facilement par la suite.

screen -S lenomchoisi

Une fois screen lancé, vous êtes dans un terminaux tout à fait standard. Vous pouvez lancer des commandes et voir leur résultat. Rien ne vous distingue d’un terminal non screen. En général, lorsque je me connecte sur un serveur, je lance 3 terminaux :

  1. le premier me permet de faire un top, toujours présent afin de voir si rien d’anormal ne se passe sur le serveur
  2. le second me permet de voir des logs à l’aide de la commande « tail -f »
  3. le troisième me permet de réaliser des actions

Nous allons reproduire cela. Tout d’abord, je lance top. Ensuite, je donne un nom à mon terminal en tapant CTRL-a A. Ce raccourcit clavier se fait en deux étapes distinctes:

  1. CTRL-a : je tape la touche Contrôle que je maintiens puis ensuite je tape sur la touche « a »
  2. A (a majuscule) : je lâche la touche Contrôle puis je maintiens la touche Shift et j’appuie sur a.

Une fois ce raccourci clavier tapé, je peux changer le nom de mon terminal. Par défaut, il porte le nom « bash » mais moi je change pour… « top » tout simplement :-). Je crée ensuite mes autres terminaux avec la combinaison clavier CTRL-a CTRL-c (c comme « create »). Pour chaque terminal, le lui donne un nom avec encore une fois la combinaison clavier CTRL-a A. J’ai donc 3 terminaux créés.

Pour lister les terminaux ouverts et voir leur nom, il suffit de taper la combinaison claver CTRL-a « . Dès lors, vous pouvez naviguer dans les terminaux en utilisant les flèches du pavé numérique. Une fois le terminal choisi, vous pouvez taper sur la touche Entrée pour l’utiliser. Il est important de noter que le nommage des terminaux est importants afin de les retrouver facilement dans la liste. Vous pouvez ensuite naviguer de terminal en terminal par les touches de combinaison suivantes:

  • CTRL-a n (n pour next) : terminal suivant dans la liste
  • CTRL-a backspace : terminal précédent dans la liste
  • CTRL-a n (où n est un chiffre) : aller au terminal numéro n (attention : la numérotation des terminaux commence à 0)

Vous pouvez ensuite vous détacher de votre session screen à l’aide de la combinaison CTRL-a d (d comme détacher). Cela vous permet de sortir de screen sans le terminer. C’est à dire que screen continue d’être exécuté en tâche de fond. Vous pouvez quitter votre session SSH : screen continuera de fonctionner en tâche de fond. Vous pouvez ensuite retrouver les sessions screen en cours sur un serveur en tapant :

screen -ls

(facile de se souvenir de cette commande ;-)). Là vous verrez toutes les sessions screen lancées en tâche de fond. Vous pouvez vous rattacher à une session screen préalablement détachée à l’aide de

screen -r lenomchoisi

Dès lors, vous retrouvez tous les terminaux en cours. Très pratique lorsque l’on doit lancé un script qui dure très longtemps :

  1. on lance screen
  2. on lance le script dans screen
  3. on se détache de screen

Le point fort de screen est vraiment dans la capacité à se déconnecter et se reconnecter. Dès que vous devez lancer un script dont la durée d’exécution est importante (plusieurs minutes), il faut utiliser screen afin de ne pouvoir laisser celui-ci tourné en tâche de fond malgré les déconnexions réseaux. Je l’utilise personnellement dans le cadre de mes déploiements sur des sites distants, avec une connexion ADSL de mauvaise qualité (déploiement qui peuvent durer plusieurs heures). Pour cela, je réalise un script qui va:

  1. télécharger des fichiers (plusieurs Go)
  2. décompresser les fichiers
  3. créer la base de données
  4. importer les données dans la base (minimum deux heures)
  5. déployer plusieurs Go d’images

Sans screen, je devrais découper mon script en plusieurs scripts et lancer un par un en espérant que le timeout SSH soit suffisant. Je ne me soucie pas de cela, screen est là pour prendre le relais si la connexion SSH tombe.

Dernier point, très utile dans screen. Parfois, on accède à des serveurs dont les responsables ne sont pas aussi à l’aise techniquement que nous. Dans mon cadre, ce sont des administrateurs Windows principalement, qui ont un unique serveur Linux. On ne peut pas leur demander d’être expert Linux alors qu’ils n’ont qu’un seul serveur à administrer. Ce peut être aussi des informaticiens dont la spécialité est la bureautique et qui sont amenés à évoluer vers un poste d’administrateur sur un petit réseau (quelques postes bureautiques, quelques serveurs télé-administrés). Ou alors, ce sont des étudiants en alternance : ils ne sont pas encore très expérimentés. Pour éviter d’être trop sollicité, j’ai décidé de leur montrer et de leur expliquer comment diagnostiquer et corriger les problèmes les plus courants. Problème : commet faire ça à distance? Simple : le téléphone pour l’explication orale et screen pour visualiser mes actions. Mon utilisation est alors la suivante :

  1. j’appelle mon correspond local
  2. je me connecte en SSH
  3. je lance screen avec un nom précis : screen -S formation
  4. je lui indique le nom du screen (formation)
  5. il se connecte à la même session : screen -x formation

L’option -x permet à un utilisateur de se connecter à la même session qu’un autre utilisateur sans le déconnecter. Les deux utilisateurs voient alors la même chose, ils peuvent tous les deux taper des commandes. Ce qui est visible chez l’un sera visible chez l’autre. Ce que fait l’un sera visible par l’autre. Cela évite d’avoir à recourir à des outils de prise en main à distance, pour lesquels il faut un compte et un environnement bien spécifique. Bien sûr, cela ne peut se faire que si vous avez un accès SSH au serveur.

Voilà, c’est tout pour cette vidéo sur screen. Attention, l’utilisation de screen n’est pas évidente à prendre en main. Cependant, cela vaut vraiment le coup : il faut investir un peu de temps au début pour ensuite ne plus en perdre. Screen peut vous sauver la mise lorsque vous avez des déconnexions intempestives.