{"id":160,"date":"2017-11-07T23:48:36","date_gmt":"2017-11-07T23:48:36","guid":{"rendered":"http:\/\/www.technologue.net\/?p=160"},"modified":"2017-11-10T01:49:46","modified_gmt":"2017-11-10T01:49:46","slug":"survivre-a-une-deconnexion","status":"publish","type":"post","link":"http:\/\/www.technologue.net\/?p=160","title":{"rendered":"Survivre \u00e0 une d\u00e9connexion"},"content":{"rendered":"<p>Lorsqu&rsquo;on d\u00e9marre une t\u00e2che sur un ordinateur distant, il faut s&rsquo;assurer que la t\u00e2che est termin\u00e9e avant de rompre la connexion. En effet, le comportement de Linux dans le cas o\u00f9 une communication est rompue est d&rsquo;envoyer un signal SIGHUP aux programmes qui d\u00e9pendent de cette connexion. Si rien n&rsquo;a \u00e9t\u00e9 fait pour le contrer, le comportement par d\u00e9faut est d&rsquo;arr\u00eater brusquement la t\u00e2che.<\/p>\n<p>D\u00e9l\u00e9guer une t\u00e2che longue \u00e0 une autre machine est courant dans le monde Unix\/Linux. Mais il faut prendre certaines pr\u00e9cautions pour \u00e9viter que notre t\u00e2che qui s&rsquo;ex\u00e9cute sur le serveur ne soit avort\u00e9e par le fait qu&rsquo;on d\u00e9connecte notre portable pour l&rsquo;amener \u00e0 la maison.<\/p>\n<p>V\u00e9rifions comment notre appli r\u00e9agit \u00e0 un signal SIGHUP:<\/p>\n<p style=\"padding-left: 30px;\">kill -SIGHUP $(pidof appli)<\/p>\n<p>ou<\/p>\n<p style=\"padding-left: 30px;\">pkill -SIGHUP appli<\/p>\n<p>Si l&rsquo;application avorte et que ce comportement ne nous convient pas, on pourra utiliser l&rsquo;une des approches suivantes:<\/p>\n<h3>Ajouter le traitement du SIGHUP \u00e0 notre application<\/h3>\n<p>S&rsquo;il s&rsquo;agit d&rsquo;un programme qu&rsquo;on a \u00e9crit ou d&rsquo;un logiciel libre dont on a le code source, il est facile d&rsquo;ajouter du code pour traiter le signal SIGHUP.<\/p>\n<h3>Demander \u00e0 <em>bash<\/em> d&rsquo;ignorer le signal<\/h3>\n<p>Si la solution pr\u00e9c\u00e9dente n&rsquo;est pas possible, on peut demander \u00e0 <em>bash<\/em> d&rsquo;ignorer le signal SIGHUP<em>:<\/em><\/p>\n<pre>trap '' SIGHUP\r\n.\/appli args\r\ntrap SIGHUP    # reprendre le comportement par d\u00e9faut<\/pre>\n<p>Exemple d&rsquo;un script qui ignore les SIGHUP (pour la dur\u00e9e du script):<\/p>\n<pre>trap '' SIGHUP\r\n.\/appli args<\/pre>\n<h3>On peut aussi utiliser le programme <em>nohup<\/em> qui d\u00e9connecte l&rsquo;appli de ses canaux standards et envoie toute sortie vers le fichier <em>nohup.out<\/em><\/h3>\n<p style=\"padding-left: 30px;\"><em>nohup appli args<\/em><\/p>\n<h3><a href=\"http:\/\/www.technologue.net\/?p=163\">screen<\/a><\/h3>\n<p><em>screen<\/em> a \u00e9t\u00e9 con\u00e7u pour g\u00e9rer plusieurs applications pour une m\u00eame connexion. Un effet collat\u00e9ral est que screen cr\u00e9\u00e9e un lien virtuel entre une application et ses canaux standards (STDIN, STDOUT, STDERR).\u00a0 Par cons\u00e9quent, une d\u00e9connexion du lien de communication n&rsquo;est pas per\u00e7ue par l&rsquo;application. La t\u00e2che continue \u00e0 s&rsquo;ex\u00e9cuter en arri\u00e8re-plan et lorsqu&rsquo;on r\u00e9tablit la connexion, on peut refaire le lien avec l&rsquo;application.<\/p>\n<h3>tmux<\/h3>\n<p>tmux est semblable \u00e0 <em>screen<\/em> et r\u00e9alise les m\u00eames fonctions. Sa principale diff\u00e9rence est qu&rsquo;il est de facture plus moderne. tmux se d\u00e9finit comme &lsquo;multiplexeur de terminaux&rsquo;. Il reprend les concepts de <em>screen<\/em> mais ajoute un gestionnaire de fen\u00eatre qui partage la fen\u00eatre en zones rectangulaires.<\/p>\n<h3>awesome<\/h3>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Lorsqu&rsquo;on d\u00e9marre une t\u00e2che sur un ordinateur distant, il faut s&rsquo;assurer que la t\u00e2che est termin\u00e9e avant de rompre la connexion. En effet, le comportement de Linux dans le cas o\u00f9 une communication est rompue est d&rsquo;envoyer un signal SIGHUP aux programmes qui d\u00e9pendent de cette connexion. Si rien n&rsquo;a \u00e9t\u00e9 fait pour le contrer, &hellip; <\/p>\n<p class=\"link-more\"><a href=\"http:\/\/www.technologue.net\/?p=160\" class=\"more-link\">Continuer la lecture<span class=\"screen-reader-text\"> de &laquo;&nbsp;Survivre \u00e0 une d\u00e9connexion&nbsp;&raquo;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[4,3,10],"tags":[20],"_links":{"self":[{"href":"http:\/\/www.technologue.net\/index.php?rest_route=\/wp\/v2\/posts\/160"}],"collection":[{"href":"http:\/\/www.technologue.net\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.technologue.net\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.technologue.net\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/www.technologue.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=160"}],"version-history":[{"count":6,"href":"http:\/\/www.technologue.net\/index.php?rest_route=\/wp\/v2\/posts\/160\/revisions"}],"predecessor-version":[{"id":169,"href":"http:\/\/www.technologue.net\/index.php?rest_route=\/wp\/v2\/posts\/160\/revisions\/169"}],"wp:attachment":[{"href":"http:\/\/www.technologue.net\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=160"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.technologue.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=160"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.technologue.net\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=160"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}