Utiliser un script SysVinit avec systemd

Intro

Systemd sera le système d'init de la future version stable de Debian (uniquement pour les architectures utilisant un noyau Linux). Une présentation en français de systemd est disponible sur le site de linuxFr.

Pour lancer et encadrer les services, systemd utilise des fichiers .service qui décrivent les conditions et contraintes à appliquer à chaque service. Cela signifie que les scripts du répertoire /etc/init.d/ ne sont plus pris en considération.

Peut-être avez-vous passé beaucoup de temps à écrire et tester vos scripts d'init personnels ? Ils fonctionnent parfaitement, et vous ne souhaitez pas apprendre la syntaxe de systemd pour recommencer tout votre travail ? Rassurez-vous, systemd peut parfaitement utiliser un script d'init pour lancer et encadrer un service. Voici comment.

Cas pratique : le script /etc/init.d/machin.sh

On souhaite réutiliser le script /etc/init.d/machin.sh. On souhaite également que les logs de ce service soient dirigés vers le traditionnel syslog-ng, ce qui permettra d'avoir des logs au format texte.

Gestion des logs avec syslog-ng

Systemd fournit son propre utilitaire pour lire et filtrer les logs, il s'agit de la commande journalctl.

Si vous préférez les logs traditionnels gérés par syslog-ng, installez syslog-ng sur votre machine, puis faites :

$ systemctl enable syslog-ng.service

Note : Pour une raison que j'ignore, le socket de syslog-ng nécessite le fichier syslog.service, qui est créé par la commande ci-dessus. De plus, cette commande active le lancement automatique de syslog-ng au démarrage de l'ordinateur.

Réutiliser notre script machin.sh

Pour indiquer à systemd d'utiliser le script machin.sh, il nous faut un fichier .service adéquat. On se rend dans le répertoire /etc/systemd/system/ pour y créer le fichier machin.service qui contient ceci :

#########################################

[Unit]
Description=Mon service machin qui fait des bidules
Wants=syslog-ng.service

[Service]
ExecStart=/etc/init.d/machin.sh start
ExecStop=/etc/init.d/machin.sh stop
Type=forking
PIDFile=/var/run/machin.pid
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=carabistouille

[Install]
WantedBy=multi-user.target

#########################################

Pour en savoir plus pour chaque option, cliquez dessus. L'option PIDFile est facultative, systemd lit le fichier indiqué (systemd n'écrit pas dedans).

Pour que notre nouveau fichier machin.service soit pris en considération par systemd, faites :

$ systemctl --system daemon-reload

Note : En root, le « - -system » est facultatif.

Enfin, on lance notre service machin :

$ systemctl start machin.service

Note : Grâce au paramètre « Wants=syslog-ng.service », le lancement de machin.service déclenche le lancement de syslog-ng.

Les logs de notre service seront récupérés par syslog, et lisibles dans les fichiers textes suivant :

  • /var/log/messages.log
  • /var/log/everything.log
  • /var/log/daemon.log

En plus de la consultation des logs, on peut vérifier que tout va bien avec la commande systemctl status :

$ systemctl status machin.service

Pour arrêter le service, on fait :

$ systemctl stop machin.service

Et pour lancer automatiquement le service au démarrage (plus exactement : le service sera lancé dès que la cible multi-user.target est atteinte) :

$ systemctl enable machin.service

Enfin, quelques autres commandes pour interagir avec le service.

Licence de ce tutoriel

Ce tutoriel est publié sous la licence « Do What the Fuck You Want to Public License ».

 Logo « Do What the Fuck You Want to Public License »

 
astuces/utiliser_un_script_sysvinit_avec_systemd.txt · Dernière modification: Le 27/10/2019 à 12:11 par minzord     Haut de page
Recent changes RSS feed Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki Design by Chirripó