{"id":35,"date":"2016-02-27T04:28:14","date_gmt":"2016-02-27T04:28:14","guid":{"rendered":"http:\/\/marcjuneau.ca\/?p=35"},"modified":"2016-02-27T04:45:07","modified_gmt":"2016-02-27T04:45:07","slug":"faire-un-deamon-sous-linux","status":"publish","type":"post","link":"https:\/\/marcjuneau.ca\/?p=35","title":{"rendered":"Faire un daemon sous Linux"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter\" src=\"http:\/\/star06.s.t.pic.centerblog.net\/2sxf113r.png\" alt=\"\" width=\"250\" height=\"250\" \/>Sous linux, le terme <em><strong>daemon<\/strong> <\/em>d\u00e9signe un ou des processus qui s&rsquo;ex\u00e9cutent en arri\u00e8re plan. C&rsquo;est l&rsquo;\u00e9quivalent des services sous Windows.<\/p>\n<p>Les \u00e9tapes suivantes visent \u00e0 d\u00e9marrer\u00a0un programme ex\u00e9cutable automatiquement lors du lancement. Il est toujours possible d&rsquo;arr\u00eater, de lancer ou de relancer le <strong><em>daemon<\/em> <\/strong>en ex\u00e9cutant manuellement le script dans une console.<\/p>\n<p>1 ) Mettre un script dans le r\u00e9pertoire <strong><em>\/etc\/init.d\/<\/em><\/strong><\/p>\n<p>Vous trouverez dans ce r\u00e9pertoire le fichier <strong><em>skeleton<\/em><\/strong>, qui est un canevas simple \u00e0 modifier. Faites une copie du fichier et changer le nom pour qu&rsquo;il repr\u00e9sente bien l&rsquo;application qui sera lanc\u00e9e. Dans notre exemple, il s&rsquo;agit d&rsquo;un petit programme qui g\u00e8re le clignotement d&rsquo;une led de statut. J&rsquo;ai donc renomm\u00e9 le fichier stateLed.<\/p>\n<pre>cp\u00a0\/etc\/init.d\/skeleton\u00a0\/etc\/init.d\/stateLed<\/pre>\n<p>Voici les lignes que vous devrez modifier :<\/p>\n<pre>DESC=\"Description of the service\"\r\nNAME=daemonexecutablename\r\nDAEMON=\/usr\/sbin\/$NAME\r\nDAEMON_ARGS=\"--options args\"\r\nPIDFILE=\/var\/run\/$NAME.pid\r\nSCRIPTNAME=\/etc\/init.d\/$NAME<\/pre>\n<p>Voici les lignes modifi\u00e9es pour mon exemple :<\/p>\n<pre>DESC=\"State led service\"\r\nNAME=stateLed\r\nDAEMON=\/usr\/bin\/$NAME\r\nDAEMON_ARGS=\" 4\"\r\nPIDFILE=\/var\/run\/$NAME.pid\r\nSCRIPTNAME=\/etc\/init.d\/$NAME<\/pre>\n<p>2) Pour que le script puisse s&rsquo;ex\u00e9cuter, il faut maintenant le rendre ex\u00e9cutable. Entrez la commande suivante dans une console :<\/p>\n<pre>sudo chmod +x stateLed<\/pre>\n<p>3 )Pour que l&rsquo;appel du programme par le script fonctionne, il faut mettre le fichier ex\u00e9cutable dans le r\u00e9pertoire \/usr\/bin\/.<\/p>\n<p>Si le programme requiert divers appels de commande, il est aussi possible de mettre un script dans le r\u00e9pertoire \/usr\/sbin\/. Voici un exemple :<\/p>\n<pre>#!\/bin\/bash\r\n\/etc\/init.d\/stateLed start<\/pre>\n<p>4) La derni\u00e8re \u00e9tape valide le script dans la liste des scripts \u00e0 consid\u00e9rer.<\/p>\n<p>update-rc.d stateLed defaults<\/p>\n<p>Vous devriez obtenir un message semblable \u00e0 ceci :<\/p>\n<pre style=\"padding-left: 30px;\">Adding\u00a0system\u00a0startup\u00a0for\u00a0\/etc\/init.d\/stateLed ... \u00a0\u00a0\u00a0\r\n\/etc\/rc0.d\/K20stateLed -&gt;\u00a0..\/init.d\/stateLed \r\n\/etc\/rc1.d\/K20stateLed  -&gt;\u00a0..\/init.d\/stateLed \r\n\/etc\/rc6.d\/K20stateLed  -&gt;\u00a0..\/init.d\/stateLed  \u00a0 \u00a0\r\n\/etc\/rc2.d\/S20stateLed -&gt;\u00a0..\/init.d\/stateLed  \u00a0 \u00a0\r\n\/etc\/rc3.d\/S20stateLed  -&gt;\u00a0..\/init.d\/stateLed  \u00a0 \u00a0\r\n\/etc\/rc4.d\/S20stateLed  -&gt;\u00a0..\/init.d\/stateLed  \u00a0 \u00a0\r\n\/etc\/rc5.d\/S20stateLed  -&gt;\u00a0..\/init.d\/stateLed<\/pre>\n<p>\u00c7a devrait maintenant fonctionner.<\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Sous linux, le terme daemon d\u00e9signe un ou des processus qui s&rsquo;ex\u00e9cutent en arri\u00e8re plan. C&rsquo;est l&rsquo;\u00e9quivalent des services sous Windows. Les \u00e9tapes suivantes visent \u00e0 d\u00e9marrer\u00a0un programme ex\u00e9cutable automatiquement lors du lancement. Il est toujours possible d&rsquo;arr\u00eater, de lancer ou de relancer le daemon en ex\u00e9cutant manuellement le script<span class=\"more-link\"><a href=\"https:\/\/marcjuneau.ca\/?p=35\">Continue Reading<\/a><\/span><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[7,3],"tags":[],"class_list":["entry","author-mjuneau","post-35","post","type-post","status-publish","format-standard","category-linux","category-pcduino"],"_links":{"self":[{"href":"https:\/\/marcjuneau.ca\/index.php?rest_route=\/wp\/v2\/posts\/35","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/marcjuneau.ca\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/marcjuneau.ca\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/marcjuneau.ca\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/marcjuneau.ca\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=35"}],"version-history":[{"count":6,"href":"https:\/\/marcjuneau.ca\/index.php?rest_route=\/wp\/v2\/posts\/35\/revisions"}],"predecessor-version":[{"id":43,"href":"https:\/\/marcjuneau.ca\/index.php?rest_route=\/wp\/v2\/posts\/35\/revisions\/43"}],"wp:attachment":[{"href":"https:\/\/marcjuneau.ca\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=35"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/marcjuneau.ca\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=35"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/marcjuneau.ca\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=35"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}