Sous Linux, Systemd est le candidat parfait pour gérer ses propres services. La bonne nouvelle pour nous c’est qu’il est extrêmement simple d’en créer un. Voyons comment faire au travers d’un exemple : créer un service pour le démon Apache Exporter (utilisé pour récupérer les métrics d’Apache).

Ecrire le service

Rien de plus simple, on commence par créer le fichier de configuration du service :

$ nano /etc/systemd/system/apache-exporter.service

Et on met dedans :

[Unit]
Description=Prometheus Apache Exporter

[Service]
User=nicolas
Group=nicolas
WorkingDirectory=/usr/bin
Type=simple
ExecStart=/usr/bin/apache_exporter
Restart=always

[Install]
WantedBy=multi-user.target

Et voilà. Rien de plus. En fait si, il faut recharger la config :

$ systemctl daemon-reload

Opérations usuelles

Désormais, les commandes usuelles relatives aux services sont disponibles. On peut par exemple vérifier le status :

$ systemctl status apache-exporter
apache-exporter.service - Prometheus Apache Exporter
   Loaded: loaded (/etc/systemd/system/apache-exporter.service; disabled; vendor preset: enabled)
   Active: inactive (dead)

Activer le service :

$ systemctl start apache-exporter

Vérifier que le démon ciblé fonctionne correctement :

$ ss -lpt
LISTEN 0 128 *:9117 *:* users:(("apache_exporter",pid=904,fd=3))   

Parfait, le démon écoute bien sur le port 9117. Autres actions usuelles :

# Arrêter le service
$ systemctl stop apache-exporter

# Redémarrer le service
$ systemctl restart apache-exporter

# Activer le service au démarrage
$ systemctl enable apache-exporter
Created symlink /etc/systemd/system/multi-user.target.wants/apache-exporter.service → /etc/systemd/system/apache-exporter.service.

# Désactiver le service au démarrage
$ systemctl disable apache-exporter

Cas plus complexe

Supposons que nous voulions passer des paramètres. Par exemple, l’exporter mysql pour Prometheus requiert les identifiants à la base de données. Ces identifiants sont passés dans la variable d’environnement DATA_SOURCE_NAME. Au lieu de coder en dur ces paramètres créons un fichier de configuration :

$ nano /etc/default/mysql-exporter

Et on met dedans (adapter à vos besoin, ici il faut indiquer l’utilisateur qui a accès aux statistiques de MySQL) :

DATA_SOURCE_NAME=<user>:<password>#@(localhost:3306)/ 

Créer la configuration du service, on ajoute simplement la ligne EnvironmentFile :

[Unit]
Description=Prometheus Mysql Exporter

[Service]
User=nicolas
Group=nicolas
WorkingDirectory=/usr/bin
Type=simple
ExecStart=/usr/bin/mysqld_exporter
Restart=always
EnvironmentFile=/etc/default/mysql-exporter

[Install]
WantedBy=multi-user.target

Reste plus qu’à activer le service comme précédemment.