{"id":2117,"date":"2013-10-21T00:24:36","date_gmt":"2013-10-20T22:24:36","guid":{"rendered":"https:\/\/www.azurs.net\/carnet\/?p=2117"},"modified":"2025-10-22T11:34:16","modified_gmt":"2025-10-22T09:34:16","slug":"utiliser-screen","status":"publish","type":"post","link":"https:\/\/www.azurs.net\/carnet\/2013\/10\/utiliser-screen\/","title":{"rendered":"Linux : utiliser screen pour g\u00e9rer les t\u00e2ches ex\u00e9cut\u00e9es en arri\u00e8re-plan"},"content":{"rendered":"<p>Il est possible de lancer une t\u00e2che en arri\u00e8re-plan dans un terminal en ajoutant une esperluette (&#038;) \u00e0 la fin d&rsquo;une ligne de commande ou, si la commande est d\u00e9j\u00e0 lanc\u00e9e, en utilisant la combinaison de touches CTRL+Z pour arr\u00eater la t\u00e2che associ\u00e9e \u00e0 la commande bg pour relancer la t\u00e2che et \u00e0 la commande fg pour la remettre au premier plan, mais cette solution pr\u00e9sente quelques inconv\u00e9nients, notamment lorsque la machine est administr\u00e9e \u00e0 distance (configuration <i>headless<\/i>). Screen est un petit utilitaire qui permet de contourner certaines de ces difficult\u00e9s.<\/p>\n<figure id=\"attachment_2120\" aria-describedby=\"caption-attachment-2120\" style=\"width: 625px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.azurs.net\/carnet\/wp-content\/uploads\/2013\/10\/voies-paralleles-750x562.jpg\" alt=\"Voies de chemin de fer parall\u00e8les.\" width=\"625\" height=\"468\" class=\"size-large wp-image-2120\" srcset=\"https:\/\/www.azurs.net\/carnet\/wp-content\/uploads\/2013\/10\/voies-paralleles-750x562.jpg 750w, https:\/\/www.azurs.net\/carnet\/wp-content\/uploads\/2013\/10\/voies-paralleles-300x225.jpg 300w, https:\/\/www.azurs.net\/carnet\/wp-content\/uploads\/2013\/10\/voies-paralleles-624x468.jpg 624w, https:\/\/www.azurs.net\/carnet\/wp-content\/uploads\/2013\/10\/voies-paralleles.jpg 1024w\" sizes=\"auto, (max-width: 625px) 100vw, 625px\" \/><figcaption id=\"caption-attachment-2120\" class=\"wp-caption-text\">Screen permet d&rsquo;ex\u00e9cuter des t\u00e2ches en arri\u00e8re-plan sans maintenir ouvert le terminal dans lequel elles ont \u00e9t\u00e9 lanc\u00e9es, et sans collision. Source : <a href=\"http:\/\/www.flickr.com\/photos\/xlibber\/\">xlibber<\/a>, image sous <a href=\"http:\/\/creativecommons.org\/licenses\/by\/2.0\/\">licence Creative Commons<\/a>.<\/figcaption><\/figure>\n<p><!--more--><\/p>\n<h2>Dans quel cas utiliser screen ?<\/h2>\n<p>C&rsquo;est particuli\u00e8rement utile lorsqu&rsquo;on doit lancer \u00e0 distance (par exemple sur une machine administr\u00e9e via une connexion SSH) une t\u00e2che dont l&rsquo;ex\u00e9cution promet d&rsquo;\u00eatre longue (comme par exemple la synchronisation \u00ab manuelle \u00bb de fichiers entre deux unit\u00e9s de stockage en r\u00e9seau, en utilisant le protocole et la commande rsync).<\/p>\n<p>Screen permet d&rsquo;ouvrir un terminal <em>virtuel<\/em>, d&rsquo;y lancer une t\u00e2che et de la laisser tourner, de quitter la session ainsi ouverte et de fermer tranquillement le terminal ouvert sur la machine, puis d&rsquo;y revenir pour voir si tout s&rsquo;est bien d\u00e9roul\u00e9.<\/p>\n<p>Screen s&rsquo;installe tr\u00e8s simplement et se trouve dans les d\u00e9p\u00f4ts de la plupart des distributions.<\/p>\n<p>Sous Arch Linux ARM, par exemple, screen n&rsquo;est pas embarqu\u00e9 dans la distribution par d\u00e9faut, et il faut l&rsquo;installer en passant la commande :<br \/>\n<code># <span style=\"color: navy\">pacman -S screen<\/span><\/code><\/p>\n<h2>Exemple concret : utilisation de screen pour lancer et suivre le d\u00e9roulement de la synchronisation entre une machine-source et une machine-cible fonctionnant comme un serveur de sauvegarde<\/h2>\n<p><em>Lancement de rsync pour synchroniser le contenu du r\u00e9pertoire \/media\/hdd\/ de la machine source avec le r\u00e9pertoire \/media\/SauvegardeHDD\/ de la machine cible, les deux machines \u00e9tant connect\u00e9es au r\u00e9seau (avec respectivement X.X.X.X et Y.Y.Y.Y comme adresses IP) et administr\u00e9es \u00e0 distance via une connexion SSH.<\/em><\/p>\n<h3>M\u00e9thode classique sans utiliser screen et en conservant la t\u00e2che au premier-plan<\/h3>\n<p>Une premi\u00e8re solution est d&rsquo;ouvrir un terminal sur la machine-source, d&rsquo;y lancer la commande rsync et d&rsquo;attendre qu&rsquo;elle se termine :<br \/>\n<code>$ <span style=\"color: navy\">ssh root@X.X.X.X<\/span><br \/>\n# <span style=\"color: navy\">rsync \/media\/hdd\/ utilisateur@Y.Y.Y.Y\/media\/SauvegardeHDD<\/span><\/code><br \/>\nmais pour reprendre la main sur le terminal et accomplir une autre t\u00e2che, si la t\u00e2che lanc\u00e9e en premier doit durer 4 heures, \u00e7a risque de devenir hum&#8230; plut\u00f4t p\u00e9nible !<\/p>\n<h3>M\u00e9thode classique plus \u00e9l\u00e9gante sans utiliser screen en envoyant la t\u00e2che \u00e0 l&rsquo;arri\u00e8re-plan<\/h3>\n<p>Une deuxi\u00e8me solution est d&rsquo;envoyer la t\u00e2che \u00e0 l&rsquo;arri\u00e8re-plan lors du passage de la commande en ajoutant une esperluette \u00e0 la fin de la ligne de commande :<br \/>\n<code>$ <span style=\"color: navy\">ssh root@X.X.X.X<\/span><br \/>\n# <span style=\"color: navy\">rsync \/media\/hdd\/ utilisateur@Y.Y.Y.Y\/media\/SauvegardeHDD <strong>&<\/strong><\/span><\/code><br \/>\nPour la r\u00e9cup\u00e9rer, il suffit alors de passer la commande :<br \/>\n<code># <span style=\"color: navy\">fg<\/span><\/code><br \/>\nou a posteriori :<br \/>\n<code>$ <span style=\"color: navy\">ssh root@X.X.X.X<\/span><br \/>\n# <span style=\"color: navy\">rsync \/media\/hdd\/ utilisateur@Y.Y.Y.Y\/media\/SauvegardeHDD<\/span><\/code><br \/>\n<span style=\"color: navy\">Ctrl + Z<\/span> pour arr\u00eater la t\u00e2che et l&rsquo;envoyer \u00e0 l&rsquo;arri\u00e8re-plan.<br \/>\nPuis<br \/>\n<code># <span style=\"color: navy\">bg<\/span><\/code><br \/>\npour la d\u00e9marrer en arri\u00e8re plan.<br \/>\nPour la r\u00e9cup\u00e9rer :<br \/>\n<code># <span style=\"color: navy\">fg<\/span><\/code><br \/>\nMais si on vient \u00e0 fermer le terminal ouvert \u00e0 distance sur la machine-source, l&rsquo;ex\u00e9cution de la commande risque elle aussi d&rsquo;\u00eatre interrompue. Il faut donc laisser ouvert un terminal sur la machine-source, c&rsquo;est \u00e0 dire maintenir la connexion ce qui est&#8230; relativement p\u00e9nible et surtout inutile.<\/p>\n<h3>M\u00e9thode simple et pratique en utilisant screen<\/h3>\n<p>La solution avec screen :<br \/>\nOn ouvre un terminal sur la machine-source :<br \/>\n<code>$ <span style=\"color: navy\">ssh root@X.X.X.X<\/span><\/code><br \/>\nOn cr\u00e9e une session (nomm\u00e9e par exemple <i>synchr<\/i> avec screen :<br \/>\n<code># <span style=\"color: navy\">screen -S synchro<\/span><\/code><br \/>\nDans la session ainsi ouverte sur la machine-source, on lance la commande longue et p\u00e9nible \u00e0 regarder s&rsquo;\u00e9tirer dans le temps :<br \/>\n<code># <span style=\"color: navy\">rsync \/media\/hdd\/ utilisateur@Y.Y.Y.Y\/media\/SauvegardeHDD<\/span><\/code><br \/>\nLa commande d\u00e9marre, et on peut <i>d\u00e9tacher<\/i> la session et la laisser tourner tranquillement en arri\u00e8re-plan :<br \/>\n<span style=\"color: navy\">Ctrl +A D<\/span><br \/>\nOn retourne dans le terminal ouvert initialement sur la machine source, et on peut le fermer sans attendre la fin de la commande chronophage :<br \/>\n<code># <span style=\"color: navy\">exit<\/span><\/code><\/p>\n<p>Pour revenir voir o\u00f9 en est la t\u00e2che attendue mais longue, on peut rentrer \u00e0 nouveau (apr\u00e8s avoir ouvert un terminal \u00e0 distance via SSH) dans le terminal <i>virtuel<\/i> cr\u00e9\u00e9 pr\u00e9c\u00e9demment (et qui, dans mon exemple, \u00e9tait nomm\u00e9 synchro) :<br \/>\n<code># <span style=\"color: navy\">screen -r synchro<\/span><\/code><\/p>\n<p>Et ainsi de suite&#8230;<\/p>\n<p>R\u00e9f\u00e9rences pour aller plus loin :<br \/>\nManuel de screen (passer la commande <code><span style=\"color: navy\">man screen<\/span><\/code> dans un terminal)&nbsp;;<br \/>\n<a href=\"http:\/\/doc.ubuntu-fr.org\/screen\">Description de screen dans la documentation Ubuntu<\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Ex\u00e9cuter et suivre des t\u00e2ches en arri\u00e8re-plan sous Linux : c&rsquo;est facile avec screen.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[395],"tags":[359,362,206,361,357,336,360,363,358],"class_list":["post-2117","post","type-post","status-publish","format-standard","hentry","category-bidouillages","tag-administration","tag-arriere-plan","tag-linux","tag-rsync","tag-session","tag-ssh","tag-synchronisation","tag-tache","tag-terminal"],"share_on_mastodon":{"url":"","error":""},"_links":{"self":[{"href":"https:\/\/www.azurs.net\/carnet\/wp-json\/wp\/v2\/posts\/2117","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.azurs.net\/carnet\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.azurs.net\/carnet\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.azurs.net\/carnet\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.azurs.net\/carnet\/wp-json\/wp\/v2\/comments?post=2117"}],"version-history":[{"count":14,"href":"https:\/\/www.azurs.net\/carnet\/wp-json\/wp\/v2\/posts\/2117\/revisions"}],"predecessor-version":[{"id":2132,"href":"https:\/\/www.azurs.net\/carnet\/wp-json\/wp\/v2\/posts\/2117\/revisions\/2132"}],"wp:attachment":[{"href":"https:\/\/www.azurs.net\/carnet\/wp-json\/wp\/v2\/media?parent=2117"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.azurs.net\/carnet\/wp-json\/wp\/v2\/categories?post=2117"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.azurs.net\/carnet\/wp-json\/wp\/v2\/tags?post=2117"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}