Sous Linux, Systemd est le candidat parfait pour gérer ses propres services. La bonne nouvelle c’est que c’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 :

$ 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, recharger la config :

$ systemctl daemon-reload

Opérations usuelles

Désormais, les commandes usuelles sont disponibles. On peut 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 :

# 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.